C# 如何使用LINQ对数据集进行筛选
我正在使用一个C# 如何使用LINQ对数据集进行筛选,c#,linq,dataset,linq-to-dataset,C#,Linq,Dataset,Linq To Dataset,我正在使用一个数据集,它包含两个表,我正试图通过LINQ从中获取数据 我正在努力弄清楚如何返回满足条件的记录的语法 例如: 这是两张表: 此查询将两个表联接起来(Z项将被过滤掉) 这是从上述查询派生的集合。 问题:如何仅返回Foo项目? 请注意,Foo项在其第一行/记录中具有非null值,而Bar项在第一行/记录中不具有非null值。使用所有Foo项在Foo列中至少有一个非null值,而Bar项在Foo列中永远不会有非null值这一事实,我如何更新上述查询以使查询仅返回Foo项?同样,如何
数据集
,它包含两个表,我正试图通过LINQ从中获取数据
我正在努力弄清楚如何返回满足条件的记录的语法
例如:
这是两张表:
此查询将两个表联接起来(Z项将被过滤掉)
这是从上述查询派生的集合。
问题:如何仅返回Foo项目?
请注意,Foo项在其第一行/记录中具有非null值,而Bar项在第一行/记录中不具有非null值。使用所有Foo项在Foo列中至少有一个非null值,而Bar项在Foo列中永远不会有非null值这一事实,我如何更新上述查询以使查询仅返回Foo项?同样,如何更新查询,使其仅返回条形图项目 我并不完全清楚什么是成为一个Foo和一个Bar的标准,但这里有一些想法:
var foos1 = fooBars.Where(fb => fb.wat != "bar");
var foos2 = fooBars.Where(fb => fb.wat == "foo" || fb.wat == null);
var foos3 = fooBars.Where(fb => fb.wat == "foo" || fb.foo != null);
var bars = fooBars.Where(fb => fb.wat == "bar" || fb.foo != null);
这取决于要从何处过滤不需要的
空值。如果处于连接级别,您可以稍微更改查询:
from item in fooBarItems
join data in fooBarData on item["FooBar_Id"] equals data["FooBar_Id"]
where (new[] {"A","B","C"}).Contains(item["id"]) && data["foo"] != null
select new
{
id = item["id"],
description = item["description"],
wat = data["wat"],
foo = data["foo"]
};
这将只返回两个元素:
A,我是一个Foo,空,10834
B,我是一个Foo,空,08385383
要获取剩余的值(包括foo
为null
但属于具有非null条目的foo的值),请在主查询后使用.GroupBy
和的组合。其中
:
fooBars
.GroupBy(f => f.id)
.Where(g => g.Any(f => f.foo != null))
.SelectMany(g => g); // just to make it nice list-like looking
这将选择整个组,但只选择那些至少有一个非空值的foo
(这将是最终集合中的所有条目,除了那些具有id=C
的条目)的组。我喜欢你的想法和附加的lambda-看起来它会起作用,但它不会。更新后的查询结果返回的集合与原始集合相同。奇怪。@Jed:哦,打错了。应该是f.foo!=null,而不是“
”
。现在修好了。
fooBars
.GroupBy(f => f.id)
.Where(g => g.Any(f => f.foo != null))
.SelectMany(g => g); // just to make it nice list-like looking