也许这个问题已经被问过,但我的谷歌福和SO-搜索并没有得到我什么什么,我一直在寻找。LINQ-比较和更新值
我有一个的IEqualityComparer实现了自定义类和自定义类的比较器(用于检查类的平等)。
public class Person
{
public string Name { get; set; }
public bool Flag { get; set; }
}
public class PersonComparer : IEqualityComparer<Person>
{
#region IEqualityComparer<Person> Members
public bool Equals(Person x, Person y)
{
//case insensitive compare
return string.Equals(x.Name, y.Name, StringComparison.OrdinalIgnoreCase);
}
public int GetHashCode(Person obj)
{
return base.GetHashCode();
}
#endregion
}
,并在代码中的主要部分我有2只列出了“源”和“目标”
Person bob = new Person() { Name = "Bob" };
Person sam = new Person() { Name = "Sam" };
Person andy = new Person() { Name = "Andy" };
Person thomas = new Person() { Name = "Thomas" };
Person jimmy = new Person() { Name = "Jimmy" };
Person sam2 = new Person() { Name = "sam" }; // note the lower case
Person jane = new Person() { Name = "Jane" };
List<Person> source = new List<Person>() { bob, sam, andy, thomas };
List<Person> target = new List<Person>() { sam2, andy,jane };
什么我想要做的
更新源列表,只包含山姆和安迪,因为鲍勃和托马斯不在目标列表中。我这样做
源=(从源其中(由叔在目标选择T)p 。载(P,新PersonComparer()) 选择P).ToList();
在我“旗” SAM2和安迪真实和简被标记为默认情况下“假”的目标,我不应该改变它。
我试图用这个,但是这从目标中删除“简”
//sets sam2 & andy to true, removes Jane
target = (from p in target.Select(t => { t.Flag = true; return t; })
where (from s in source
select s).Intersect(select p).ToList();
任何LINQ大师可以告诉我什么,我做错了什么?
3.Is有没有更好的方式来写查询1?
4.And最后一个简单的问题:究竟你说“=>”当你在电话
>>有副作用的查询通常是一个坏主意。 明白了!谢谢。 – ram 2009-12-13 17:44:23