私はエンティティの2つのリストを持っています。リスト1は遠隔地であり、リスト2はローカルであるとしましょう - 過去にlist1が作成され、list2が生成されました。プロパティを比較するlinq結合が必要です
両方のリストを比較し、.idで照合し、各要素の.flagプロパティのみを比較したいとします。 .flagプロパティが異なる場合は、古い要素を選択したいが、list2(新しいリスト)の.flagプロパティを使用する。
以下の例では、list1内の異なるエンティティだけを選択する方法を示しています。リスト1のエンティティを選択するにはどうすればよいですか。ただし、list2エンティティの.flagプロパティを使用します。
注:実際の問題のようにSomeEntityクラス全体をselect new SomeEntity(){}
にしたくない場合、私が扱っているクラスには多くのプロパティがあります。
class SomeEntity
{
public int id;
public bool flag;
public int some_value = -1;
}
// Setup the test
List<SomeEntity> list1 = new List<SomeEntity>();
List<SomeEntity> list2 = new List<SomeEntity>();
for (int i = 0; i < 10; i++)
{
list1.Add(new SomeEntity() { id = i, flag = true, some_value = i * 100 });
list2.Add(new SomeEntity() { id = i, flag = true, });
}
// Toggle some flags
list1[3].flag = false;
list2[7].flag = false;
// Now find the entities that have changed and need updating
var items_to_update = from x in list1
join y in list2 on x.id equals y.id
where x.flag != y.flag
select x;
これは私がやることです - 多くのありがとう。私はZiavが言ったことにすべてが従っていると思う、linqはエンティティを変更するためのツールではない。それを細くして 'item.flag = list2.Single(c => c.id == item.id).flag;' – nandor
はい、それはいいようです。 –