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