我将以下数据作为列表:
raceId data position
1 A 0
1 B 0
1 F 1
1 J 0
2 A 2
2 F 1
3 A 0
3 J 2
3 M 1
3 V 3
我需要获得所有匹配字母与同一个raceid的种族总数(计数)。
I.E搜索'A'和'J'= 2(比赛的1和3)
此外,我需要获取每个人的位置数据。
raceId data position
1 A 0
1 J 0
3 A 0
3 J 2
到目前为止,我有以下代码。
var dataValues = new string[] { 'A', 'J' };
var races = raceData
.GroupBy( ac => ac.raceId )
.Select( grp => grp.First() )
.Where( t =>
dataValues
.All( s =>
dataValues
.Contains( t.data )
)
);
var racecount = races.count()
问题是,如果数据中有任何一个字母,则返回所有raceId
值。
答案 0 :(得分:2)
这应该适合你:
var results = raceData.GroupBy(rd => rd.raceId)
.Where(g => dataValues.All(dv => g.Select(g2 => g2.data).Contains(dv)));
int raceCount = results.Count();
var results2 = results
.SelectMany(g => g)
.Where(rd => dataValues.Contains(rd.data));
raceCount
将为您提供2,results2
将为您提供您期望的4条记录。
无论如何,它对我提供的数据非常有用!
答案 1 :(得分:0)
var groupedRaces = from r in raceData
group r by r.raceId into gp
select new { raceId = gp.Key, Datas = gp.Select(g => g.data).ToArray() };
var raceIds = from r in groupedRaces
where dataVals.All(mv => r.Datas.Contains(mv))
select r.raceId;
var races = from r in raceData
where raceIds.Contains(r.raceId) && dataVals.Contains(r.data)
select r;
答案 2 :(得分:-1)