C# 查询SharePoint列表时,Any()不起作用

C# 查询SharePoint列表时,Any()不起作用,c#,visual-studio-2010,linq,sharepoint,C#,Visual Studio 2010,Linq,Sharepoint,我正在尝试查询Sharepoint列表,以查找该用户名是否存在于列表中。我在这里使用LINQ。我试过的代码: SPList l = web.Lists["Acknowledgements"]; var listEnumeration = l.Items.OfType<SPListItem>(); bool a = listEnumeration.Any(p => p["User"].ToString().Equals(@"SHAREPOINT\system")); SPLis

我正在尝试查询Sharepoint列表,以查找该用户名是否存在于列表中。我在这里使用LINQ。我试过的代码:

SPList l = web.Lists["Acknowledgements"];
var listEnumeration = l.Items.OfType<SPListItem>();
bool a = listEnumeration.Any(p => p["User"].ToString().Equals(@"SHAREPOINT\system"));
SPList l=web.list[“确认”];
var listEnumeration=l.Items.OfType();
bool a=listEnumeration.Any(p=>p[“User”].ToString().Equals(@“SHAREPOINT\system”);
但是bool返回false,即使在调试之后,XML模式显示它正在返回用户名

<z:row xmlns:z='#RowsetSchema' 
       ows_ContentTypeId='0x0100115773AE97ADF5418FF3A1AE2F660D3E' 
       ows_User='SHAREPOINT\system' 
       ows_Acknowedgement_x0020_Date='2013-01-01 00:00:00' 
       ows_ID='17' ows_ContentType='Item' 
       ows_Modified='2013-01-01 12:24:01' 
       ows_Created='2012-12-31 14:40:51' 
       ows_Author='1073741823;#System Account' 
       ows_Editor='1073741823;#System Account' />


你知道我做错了什么吗?

首先,你真的不应该使用list.Items.linq来查找目标ListItems。尝试将SPQuery与目标属性一起使用,它会更快、更可靠。
p[“User”]。ToString()
可能不会逐字返回帐户名,而是返回一个“lookup”值,该值作为字符串类似于
“1;#DOMAIN\logon”
或类似值

通常,您应该将
p[“User”]
作为一个语法分析,但在这种情况下,您可能不需要使用
包含
而不是
等于

试试看

SPList l = web.Lists["Acknowledgements"];
var listEnumeration = l.Items.Cast<SPListItem>();
bool a = listEnumeration.Any(p => p["User"].ToString().Equals(@"SHAREPOINT\system"));
SPList l=web.list[“确认”];
var listEnumeration=l.Items.Cast();
bool a=listEnumeration.Any(p=>p[“User”].ToString().Equals(@“SHAREPOINT\system”);

如果对ListNumeration执行计数,您会得到任何结果吗?是的,由于列表中有4项,因此我会将计数作为4个SPListItem对象。那么,ListNumeration是否知道它属于SPListItem类型?可能添加bool a=listEnumeration.Cast()。任何(…@Trikks尝试了该操作并包含(),仍然返回false。@Trikks,对不起,listEnumeration.Count()返回0。我想知道为什么我在调试时看到计数,它显示为4个SPListItem。显式返回0。我的技术主管让我在这里使用LINQ,因为我的其他团队成员也在使用LINQ。为了保持一致性,我也一直在使用LINQ。是的,你是对的。在发布此问题之前,我阅读了许多文章d许多推荐的SPQuery。只是想找到一种使用LINQ的方法。我一定会使用SPQuery进行尝试。谢谢!谢谢你的评论!忘了提到“用户”下面是我试图查询的列表中的一列。将尝试使用Contains。是的,我发现:pHeh。那么我该怎么做?将其作为SPFieldUserValue传递?老实说,解决此问题的最快方法是编写所有
p[“User”]
将字符串发送到控制台,然后找出字符串与预期字符串不匹配的原因。目前,我只是在暗中研究您的字段类型以及以字符串形式返回的字段类型。try Contains(),仍然返回false。我现在可以尝试Console方法。谢谢。
Cast
vs
of type
在这里是相同的,因为
l.Items
中的所有内容都是
SPListItem
。除非您更改了我没有注意到的其他内容,否则这不应该有任何差别。OfType-只返回SPListI类型的元素tem.Cast-将尝试将所有元素强制转换为SPListItem类型。我目前无法检查,但很明显,l中的项目在我们强制转换之前不是SPListItem类型。为什么它不能与类型
一起工作?我刚从列表中检索了项目。它应该是
SPListItem
。项目有什么问题吗代码?尝试使用类型为
运行它,但它不起作用。我同意,这很奇怪。类型为
的在我的环境中起作用,但我记得以前有过问题。
l.items
属于类型
SPListItemCollection
不是
IEnumerable
,这就是类型为
不起作用的原因。