C# 查询SharePoint列表时,Any()不起作用
我正在尝试查询Sharepoint列表,以查找该用户名是否存在于列表中。我在这里使用LINQ。我试过的代码: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
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
vsof type
在这里是相同的,因为l.Items
中的所有内容都是SPListItem
。除非您更改了我没有注意到的其他内容,否则这不应该有任何差别。OfType-只返回SPListI类型的元素tem.Cast-将尝试将所有元素强制转换为SPListItem类型。我目前无法检查,但很明显,l中的项目在我们强制转换之前不是SPListItem类型。为什么它不能与类型
的一起工作?我刚从列表中检索了项目。它应该是SPListItem
。项目有什么问题吗代码?尝试使用类型为
的运行它,但它不起作用。我同意,这很奇怪。类型为
的在我的环境中起作用,但我记得以前有过问题。l.items
属于类型SPListItemCollection
不是IEnumerable
,这就是类型为
的不起作用的原因。