这似乎很容易,但我无法集中注意力。
假设我有 2 个这样定义的类:
class Class1
{
public int Document;
public decimal Amount;
}
class Class2
{
public string Document;
public decimal Amount;
}
有定义IEnumerable<Class1> result1
和IEnumerable<Class2> result2
填充数据。
我有这样定义的第三个类:
class ResultClass
{
public string Document;
public decimal? AmountFromClass1;
public decimal? AmountFromClass2;
}
我想要一个 LINQ 查询,它从第一个结果中选择一些字段,从第二个结果中选择一些字段,并将它们放入定义为List<ResultClass> result
.
例如,如果我有这样result1
填充的第一个结果 ():
Document Amount
1 1.55
2 2.55
第二个结果 ( 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
语句来执行此操作,如下所示:
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 语句中执行此操作可能没有真正的好处,因为它会这样做。
但是,我正在寻找性能改进,result1
实际上result2
是来自 LINQ-to-Entities 的 IQueryables,在某种程度上,我可以这样做:
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();
}