我有两个查询,每个查询返回一个对象列表.
List<A> list1 = (....query...)
List<A> list2 = (....query...)
Run Code Online (Sandbox Code Playgroud)
"A"是对象模型.
两个查询都返回几乎相同的对象,但设置了不同的属性.
我想删除重复项,根据对象A的属性将它们合并到一个列表中.
基本上是这样的:
List<A> finalLis = list1 join list2 on elemList1.somePropID == elemList2.somePropID
Run Code Online (Sandbox Code Playgroud)
在简单的C#样式中,它将是这样的:
foreach(elem1 : list1) {
foreach(elem2: list1) {
if(elem1.someID == elem2.someID) {
elem1.someProp = elem2.someProp
elem1.otherProp = elem2.otherProp
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不想这样做,因为我确信在linq中有更优雅的方式.
如果您有任何建议,请让我知道.
Linq 可以帮助您选择,但不能帮助您更新。所以你不会摆脱foreach声明。所以你的任务可以用 linq 编写,如下所示:
//the query is like LEFT JOIN in SQL
var query = from x in list1
join y in list2 on x.IDItem equals y.IDItem
into z
from q in z.DefaultIfEmpty()
select new {IOne = x, ITwo = q};
foreach (var pair in query)
{
if (pair.ITwo != null) // && pair.IOne.OneProperty != null
pair.IOne.OneProperty = pair.ITwo.TwoProperty;
}
var resultList = query.Select(x => x.IOne).ToList();
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看结果。
| 归档时间: |
|
| 查看次数: |
3808 次 |
| 最近记录: |