我试图查询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
。