2012-01-30 41 views
6

我有一个复杂对象的主列表。Linq Select主列表的子集

我有一个int id的列表,我需要从主列表中选择相应的复杂对象。

这不起作用

MasterListofComplexObj.Where(u => MasterListofComplexObj.Select(i => i.Id).Contains(ChildListofIntIds)); 

任何帮助,将不胜感激。

+0

您是否收到错误?还是错误的结果?你能给一些输入值和你期望的输出吗? – 2012-01-30 19:04:07

回答

20

这应该工作:

var results = MasterListofComplexObj.Where(u => ChildListofIntIds.Contains(u.Id)); 
+0

你在....感谢您的帮助。在我看来,这种逻辑是相反的,你把孩子列表看看是否包含你从肥大列表中选择的标识。再次感谢 – jim 2012-01-30 19:09:43

+0

是的语法并不是你直觉上所期望的 - 但是因为你正在逐一查看每个'ComplexObj',它确实有意义 – BrokenGlass 2012-01-30 19:26:26

1
var results = from obj in MasterListofComplexObj 
    where ChildListofIntIds.Contains(obj.Id) 
    select obj; 

这是一个IEnumerable。你可能想要.FirstOrDefault()它来获得一个对象。

转化为 MasterListofComplexObj.Where(项目=> ChildListofIntIds.Contains(item.Id))

没有,如果你想要对象本身和它的属性不是一个必要的选择。

1

寻找到会加入其他更普遍的事情:

var results = MasterList.Join(ChildList, (m => m.Id), (c => c), ((m,c) => m)); 

我相信,但不能与引文或备份实验数据,即加入将快于何处 - >包含一块。