这个LINQ查询有什么问题?

时间:2011-05-25 20:10:32

标签: .net linq linq-to-objects

我正在尝试针对两个对象(SPListItemCollectionList<SPListItem>)编写LINQ查询。

当我的查询与下面的查询类似时,它可以正常工作:

var licFirst = from n in navList.Items.Cast<SPListItem>()
               from z in licZeroth
               where ((SPFieldLookupValueCollection)n["Parent"]).Select(t=>t.LookupId).Contains(z.ID)
               select n;

当我向select:

添加项目时
var licFirst = from n in navList.Items.Cast<SPListItem>()
               from z in licZeroth
               where ((SPFieldLookupValueCollection)n["Parent"]).Select(t=>t.LookupId).Contains(z.ID)
               select n, ParentId = z.ID;

它开始出错:

  

名称'z'不存在于   当前背景

如何选择z.ID

2 个答案:

答案 0 :(得分:6)

在第二个版本中,您需要稍微更改语法以获得具有2个属性的匿名类型nParentID

select new { n, ParentID = z.ID }; 

如果这不是您想要的,请在问题中澄清。

答案 1 :(得分:0)

你的最终查询应该是这个

var licFirst = from n in navList.Items.Cast<SPListItem>()
           from z in licZeroth
           where ((SPFieldLookupValueCollection)n["Parent"]).Select(t=>t.LookupId).Contains(z.ID)
           select new { n, ParentId = z.ID };