私が次のように定義されたクラスを持っているとしましょう
class Object
{
public int ID { get;set; }
public string Property { get; set; }
public override bool Equals(object obj)
{
Object Item = obj as Object;
return Item.ID == this.ID;
}
public override int GetHashCode()
{
int hash = 13;
hash = (hash * 7) + ID.GetHashCode();
return hash;
}
}
そして、次のように定義された2つのリスト:
List<Object> List1;
List<Object> List2;
これらの2つのリストには、フィールドが同じである可能性があるオブジェクトが含まれていますが、ID
フィールドは同じである場合とProperty
そうでない場合があります。これらのリストのいずれかで、プロパティ"1" "1"`にList1
含まれるすべてのオブジェクトと一緒に含まれるすべてのオブジェクトの結果が必要です。結果には、個別の値(個別のID)が含まれている必要があります。List2, with the condition that
field must be set to
if it is set to
たとえば、次のような2つのリストがある場合:
List1
-----
ID = 0, Property = "1"
ID = 1, Property = ""
ID = 2, Property = "1"
ID = 3, Property = ""
List2
-----
ID = 1, Property = "1"
ID = 2, Property = ""
ID = 3, Property = ""
次のような結果が必要です。
Result
-------
ID = 0, Property = "1"
ID = 1, Property = "1"
ID = 2, Property = "1"
ID = 3, Property = ""
現在、次のように機能します。
var Result = List1.Except(List2).Concat(List2.Except(List1));
var Intersection = List1.Intersect(List2).ToList();
Intersection.ForEach(x => {
x.Property = List1.Single(y => y.ID == x.ID).Property == "1" ? "1" : List2.Single(y => y.ID == x.ID).Property == "1" ? "1" : "";
});
Result = Result.Concat(Intersection);
...しかし、ForEachは非常に遅いです。誰かがより速い方法を提案できますか?