これはかなり簡単に思えますが、集中できません。
次のように定義された 2 つのクラスがあるとします。
class Class1
{
public int Document;
public decimal Amount;
}
class Class2
{
public string Document;
public decimal Amount;
}
定義され、データが入力されていIEnumerable<Class1> result1
ます。IEnumerable<Class2> result2
次のように定義された 3 番目のクラスがあります。
class ResultClass
{
public string Document;
public decimal? AmountFromClass1;
public decimal? AmountFromClass2;
}
最初の結果からいくつかのフィールドを選択し、2 番目の結果からいくつかのフィールドを選択し、それらを として定義された 3 番目の結果に入れる LINQ クエリが必要ですList<ResultClass> result
。
たとえば、次のresult1
ように入力された最初の結果 ( ) があるとします。
Document Amount
1 1.55
2 2.55
2 番目の結果 ( result2
) は次のように入力されます。
Document Amount
"d-1" 1.22
"d-2" 2.22
最終的result
に次のように入力したいと思います(順序は関係ありません):
Document AmountFromClass1 AmountFromClass2
"1" 1.55 null
"d-1" null 1.22
"2" 2.55 null
"d-2" null 2.22
現在foreach
、次のような 2 つのステートメントを使用してこれを行っています。
List<ResultClass> result = new List<ResultClass>();
foreach (var o in result1)
result.Add(new ResultClass
{
Document = o.Document.ToString(),
AmountFromClass1 = o.Amount,
AmountFromClass2 = null
});
foreach (var o in result2)
result.Add(new ResultClass
{
Document = o.Document,
AmountFromClass1 = null,
AmountFromClass2 = o.Amount
});
しかし、LINQを使用してこれを行いたいと思います。
出来ますか?
編集:質問を絞り込む(エンティティフレームワークタグ も追加)
これは単なるコード例であるため、同じことを行うため、単一のLINQステートメントでこれを行うことには実際の利点がない可能性があることを認識しています。ただし、実際には LINQ-to-Entities の IQueryables
であるパフォーマンスの向上を探しているので、次のようなことができます。result1
result2
List<ResultClass> MyFunc()
{
Database DB = new Database(); // object context
var result1 = DB.Class1s.Where(...);
var result2 = DB.Class2s.Where(...);
return SomeMagic()
.Select(x => new ResultFunc { ... })
.ToList();
}