我對LINQ很陌生,我正在過濾一個SQL視圖,該視圖有一個名爲'Readers'的列,該列包含由'#'分隔的多個組名(例如,Administrators#HR組#員工組「)。 有一個用戶組的列表,我需要提取所有記錄,其中讀者至少包含一個用戶組。換句話說,用戶只能看到屬於他的那些記錄。創建一個比較數組的LINQ查詢
我發現這個解決辦法,但我認爲這是極其低效:
private List<vwFax>getmyFaxes(List<string> myGroups)
{
var myFax = db.vwFax.AsQueryable();
var res = db.vwFax.AsQueryable();
List<vwFax> outRes= new List<vwFax>();
foreach (string elem in myGroups)
{
res = (from a in myFax
where a.Readers.Contains(elem)
select a);
if(res.Count() > 0)
{
outRes.AddRange(res);
}
}
return outRes.ToList();
}
任何幫助嗎?
也許'(從在myFax其中a.Readers.Any(R => myGroups.Contains(R))選擇一個).ToList()'' – haim770
db.vwFax.AsQueryable()式。 (x => myGroups.Any(y => x.Contains(y))。ToList();'你也可以創建一個存儲過程而不是LINQ。 – Valentin
看起來問題出在'if(res.Count()> 0){outRes.AddRange(res);}'因爲您正在執行SQL查詢'myGroups.Count'時,而不是執行一個大查詢。使用上面的LINQ查詢,您只會執行一個查詢。 – Valentin