通过Linq查找集合中不匹配的项目
本文关键字:不匹配 项目 集合 Linq 查找 通过 | 更新日期: 2023-09-27 18:00:52
我有一个来自数据库的结果集,我对其进行了一些处理,最终将其存储在列表中。在这个列表中,结果看起来像这样:
Field 1: ID1
Field 2: ID2
Summary: AA
Value: 15
Field 1: ID3
Field 2: ID2
Summary: AA
Value 20
Field 1: ID1
Field 2: ID4
Summary: AA
Value 25
Field 1: ID1
Field 2: ID4
Summary: AA
Value 5
Field 1: ID1
Field 2: ID4
Summary: AB
Value 5
如果你从另一个角度来看,它看起来像一个网格:
ID2 ID4
ID1: AA 15 30
ID1: AB 5
ID3: AA 20
所有可以组合在一起的值(例如:ID4、ID1、Summary AA(都会添加在一起。我需要做的是将0值应用于交集中不存在的数据。所以ID2/ID1/AB不存在。我需要在我的列表中有一个项目来表示"存在",但值为零
感谢所有的帮助。
var items = new [] {
new { F1 = "ID1", F2 = "ID2", S = "AA", V = 15 },
new { F1 = "ID3", F2 = "ID2", S = "AA", V = 20 },
new { F1 = "ID1", F2 = "ID4", S = "AA", V = 25 },
new { F1 = "ID1", F2 = "ID4", S = "AA", V = 5 },
new { F1 = "ID1", F2 = "ID4", S = "AB", V = 5 },
};
var f2s = items.Select(i => i.F2).Distinct();
var table =
from i in items
group i by new { i.F1, i.S } into g
select new
{
g.Key,
V =
from f in f2s
join x in g on f equals x.F2 into ps
from p in ps.DefaultIfEmpty()
select new { F = f, V = p != null ? p.V : 0 } into w
group w by w.F into h
select new { h.Key, V = h.Sum(c => c.V) }
};
看看联合运算符(??(。
例如:
string s = s2 ?? "0";
当s2为空时,s将为"0"。
有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/ms173224.aspx