3 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
你需要根據(jù)你的想法來改變它。如果它包含當(dāng)前項(xiàng)目的適用值,您將詢問一組預(yù)定義的用戶權(quán)限,而不是“在”中查找當(dāng)前項(xiàng)目在預(yù)定義的一組適用用戶權(quán)限中的用戶權(quán)限。這與在.NET中的常規(guī)列表中找到項(xiàng)目的方式完全相同。
使用LINQ有兩種方法,一種使用查詢語法,另一種使用方法語法?;旧?,它們是相同的,可以根據(jù)您的偏好互換使用:
查詢語法:
var selected = from u in users where new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights) select uforeach(user u in selected){ //Do your stuff on each selected user;}
方法語法:
var selected = users.Where(u => new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights));foreach(user u in selected){ //Do stuff on each selected user;}
我在這個(gè)實(shí)例中的個(gè)人偏好可能是方法語法,因?yàn)槲铱梢酝ㄟ^這樣的匿名調(diào)用來代替分配變量:
foreach(User u in users.Where(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights))){ //Do stuff on each selected user;}
從語法上看,這看起來更復(fù)雜,你必須理解lambda表達(dá)式或委托的概念才能真正弄清楚發(fā)生了什么,但正如你所看到的,這會(huì)使代碼壓縮很多。
這一切都取決于你的編碼風(fēng)格和偏好 - 我的三個(gè)例子都做了同樣的事情。
另一種方法甚至不使用LINQ,您可以使用相同的方法語法將“where”替換為“FindAll”并獲得相同的結(jié)果,這也將在.NET 2.0中起作用:
foreach(User u in users.FindAll(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights))){ //Do stuff on each selected user;}

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
在這種情況下,我會(huì)選擇Inner Join。如果我會(huì)使用contains,它會(huì)迭代6次,盡管事實(shí)上只有一個(gè)匹配。
var desiredNames = new[] { "Pankaj", "Garg" }; var people = new[] { new { FirstName="Pankaj", Surname="Garg" }, new { FirstName="Marc", Surname="Gravell" }, new { FirstName="Jeff", Surname="Atwood" } }; var records = (from p in people join filtered in desiredNames on p.FirstName equals filtered select p.FirstName).ToList();
包含的缺點(diǎn)
假設(shè)我有兩個(gè)列表對(duì)象。
List 1 List 2 1 12 2 7 3 8 4 98 5 9 6 10 7 6
使用Contains,它將搜索List 2中的每個(gè)List 1項(xiàng),這意味著迭代將發(fā)生49次!
- 3 回答
- 0 關(guān)注
- 236 瀏覽
添加回答
舉報(bào)