Linq查询帮助

时间:2010-01-15 20:15:36

标签: c# linq linq-to-objects

我有两个集合,需要从两个集合中创建一个新集合。

假设以下课程:

public class Widget
{
   property int Id{get;set;}
   property string Label{get;set;}
}

我们有两个IList类。我想创建一个包含Id,Label和Exists的匿名类型

为Id和Label做这个,我有:

var newCol=from w in widgets
           select new {Id=w.Id,Label=w.Label,Exists=????}

在Linq中是否有办法我可以在不自行编写循环代码的情况下确定存在?

修改

Exists告诉我们Widget是否在第二个列表中。例如,我刚才想到的一个解决方案是:

var newCol=from w in widgets
           select new {Id=w.Id,Label=w.Label,Exists=myWidgets.Contains(w)}

我的小部件是第二个IList。

2 个答案:

答案 0 :(得分:3)

你的问题很模糊,但我猜这就是你想要的:

var newCol = from w in widgets
             select new { Id = w.Id, Label = w.Label, 
                 Exists = others.Contains(o => o.Id == w.Id }

答案 1 :(得分:1)

您也可以使用GroupJoin执行此操作:

var newCol = widgets.GroupJoin(
    otherWidgets,
    w => w.Id,
    w => w.Id,
    (w, joined) => new { Id = w.Id, Label = w.Label, Exists = joined.Any() });