2
我想編寫一個linq表達式,它將返回不包含特定值的ID。例如,我想回到那個沒有價值= 30Linq group by +其中每組
ID, Value
1, 10
1, 20
1, 30
2, 10
2, 20
3, 10
3, 20
結果應該是2和3,因爲這些非所有的不同的ID有30
的值這可能用單一的表達做什麼?
感謝
我想編寫一個linq表達式,它將返回不包含特定值的ID。例如,我想回到那個沒有價值= 30Linq group by +其中每組
ID, Value
1, 10
1, 20
1, 30
2, 10
2, 20
3, 10
3, 20
結果應該是2和3,因爲這些非所有的不同的ID有30
的值這可能用單一的表達做什麼?
感謝
當然,這將做到這一點:
var query = from i in list
group i by i.GroupId into g
where g.Any(p => p.ItemId == 30) == false
select g.Key;
foreach(var result in query) { Console.WriteLine(result); }
此輸出:
2
3
在這裏,我已經使用,作爲一個例子:
class Product {
public int GroupId { get; set; }
public int ItemId { get; set; }
}
和
var list = new List<Product>() {
new Product() {GroupId = 1, ItemId = 10},
new Product() {GroupId = 1, ItemId = 20},
new Product() {GroupId = 1, ItemId = 30},
new Product() {GroupId = 2, ItemId = 10},
new Product() {GroupId = 2, ItemId = 20},
new Product() {GroupId = 3, ItemId = 10},
new Product() {GroupId = 3, ItemId = 20},
};
我沒有LINQ的,但這裏是SQL Server的SQL做你想做什麼:
DECLARE @YourTable table (ID int, value int)
insert into @YourTable VALUES (1, 10)
insert into @YourTable VALUES (1, 20)
insert into @YourTable VALUES (1, 30)
insert into @YourTable VALUES (2, 10)
insert into @YourTable VALUES (2, 20)
insert into @YourTable VALUES (3, 10)
insert into @YourTable VALUES (3, 20)
SELECT DISTINCT ID
FROM @YourTable y1
WHERE NOT EXISTS (SELECT Value
FROM @YourTable y2
WHERE y1.ID=y2.id and y2.value=30)
OUTPUT:
ID
-----------
2
3
(2 row(s) affected)
感謝。這很好。我從來沒有使用任何運營商。 – JKJKJK 2009-09-22 16:09:45
Aaahhh,不,除了==假! – 2009-09-22 18:49:28
@ polarbear2k:你也可以說'g.All(p => p.ItemId!= 30)'。 – jason 2009-09-23 15:10:58