我需要有关特定LINQ查询的帮助(我仍然很害怕em'!)
背景资料:
我有一个DataEntry类:
class DataEntry{
public Attribute Attribute{get; set;}
public List<object> Data{get; set;}
属性类:
class Attribute{
public string FeatureName{get; set;}
public Types FeatureType{get; set;}
public List<object> PossibleValues{get; set;}
我最终会拥有大约20个不同的数据条目,每个条目大约有1000个数据对象。我要做的是编写一个LINQ查询,根据FeatureType选择一个特定的数据条目,然后给我一个该条目的数据项总数等于特定值的计数。
我想要得到的是“高”的计数和数据条目中“低”值的计数,该数据条目的特征类型等于“foobar”。
我最接近的是:
int count = dataset.SelectMany(i => i.Data).Count(j => j.ToString() == "high");
这给了我“高”的计数,但没有按要素类型进行过滤。
有可能吗?是否可以在一个声明中做到?
答案 0 :(得分:3)
你走在正确的轨道上。只需添加Where
方法即可过滤掉内容,然后再将其投放到SelectMany
。
dataset.Where(i => i.Attribute.FeatureType == Types.FooBar)
.SelectMany(i => i.Data)
.Count(j => j.ToString() == "high")
要在单个语句中计算高和低,您可以尝试:
dataset.Where(i => i.Attribute.FeatureType == Types.FooBar)
.SelectMany(i => i.Data)
.Select(i => i.ToString())
.Aggregate(new { High = 0, Low = 0 },
(acc, i) => val == "high" ? new { High = i.High + 1, i.Low }
: val == "low" ? new { i.High, Low = i.Low + 1 } : acc);
答案 1 :(得分:2)
另一种方式:
int count =
( from dataEntry in dataset
from data in dataEntry.Data
where dataEntry.Attribute.FeatureType == Types.Foo && data.ToString() == "high"
select data
).Count();