Any()在查询SharePoint列表时不起作用



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

SPList l = web.Lists["Acknowledgements"];
var listEnumeration = l.Items.OfType<SPListItem>();
bool a = listEnumeration.Any(p => p["User"].ToString().Equals(@"SHAREPOINTsystem"));

但是bool返回false,即使在调试之后,XML模式显示它返回用户名。

<z:row xmlns:z='#RowsetSchema' 
       ows_ContentTypeId='0x0100115773AE97ADF5418FF3A1AE2F660D3E' 
       ows_User='SHAREPOINTsystem' 
       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来查找目标列表项。尝试使用带有目标属性的SPQuery,它更快更可靠。
http://www.aidangarnish.net/post/Using-SPQuery-and-CAML-to-filter-and-order.aspx

Try

SPList l = web.Lists["Acknowledgements"];
var listEnumeration = l.Items.Cast<SPListItem>();
bool a = listEnumeration.Any(p => p["User"].ToString().Equals(@"SHAREPOINTsystem"));

p["User"].ToString()可能不是逐字返回帐户名称,而是一个"查找"值,作为字符串,看起来像"1;#DOMAINlogon"或类似。

通常,您应该将p["User"]解析为SPFieldUserValue,但在这种情况下,您可能只使用Contains而不是Equals

相关内容

  • 没有找到相关文章

最新更新