我正在嘗試過濾從 Sharepoint(list) 中讀取的結果集。我必須過濾具有指定用戶的記錄,遺憾的是串列的用戶列是一個查找列,并從另一個串列中獲取實際用戶名。
通常,我可以像這樣獲取記錄的用戶名值(如果有的話):
foreach (var item in listItems)
{
if (item.FieldValues.TryGetValue("nqhs", out var userLookup))
{
if (userLookup != null && userLookup.ToString() == "Microsoft.SharePoint.Client.FieldUserValue")
{
var theUser = ((FieldLookupValue)item["nqhs"]).LookupValue; //this returns theUser = "John Doe"
}
}
}
nqhs 是 Sharepoint 串列中包含用戶名的列的名稱。
有什么方法可以將此邏輯應用于 foreach 中的 where 子句,以便我可以使用更小的結果集?
我正在嘗試這樣的事情,但我無法讓它作業:
foreach (var item in listItems.Where(p => p.((FieldLookupValue)p["nqhs"]).LookupValue == "John Doe"))
還嘗試了這個并獲取和“物件參考未設定為物件的實體”錯誤...
foreach (var item in from item in listItems where ((FieldLookupValue)item["nqhs"]).LookupValue == "John Doe" select item)
uj5u.com熱心網友回復:
嘗試先過濾查找串列,然后在 foreach 中使用過濾后的串列
var filteredList = listItems.Where(p => p.((FieldLookupValue)p["nqhs"]);
foreach(var item in filteredList)
對 SP 的某些查詢需要執行以回傳結果才能使用。這對性能也更好,因為當前回圈中的 Where 子句將在每次迭代中執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/463237.html
