通过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不存在。我需要在我的列表中有一个项目来表示"存在",但值为零
感谢所有的帮助。

通过Linq查找集合中不匹配的项目

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