아마이 질문은 이전에 이미 물어 보았지만 내 Google-fu와 SO-Search는 내가 원하는 것을 얻을 수 없었습니다.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 };
이 bob과 thomas가 목표 목록에 없기 때문에 sam과 andy를 포함합니다. 나는 이것을했다
소스 = (소스에서 p에서 대상 선택 t에서) .Contains (p, 새 PersonComparer()) 선택 p) .ToList();
대상에서 sam2 및 andy를 true로 설정해야하며 jane은 기본적으로 "false"로 플래그가 지정되어 있으므로 변경하지 않아야합니다.
나는 이것을 사용하여 시도하지만,이 대상에서 "제인"을 제거
//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. 쿼리 1을 작성하는 더 좋은 방법은 있습니까?
4.And 마지막으로 사소한 질문 : 당신이 제 4의 전화
>> 부작용이있는 검색어는 일반적으로 좋지 않습니다. 알았습니다. 감사. – ram