C# 值相同时不执行LINQ求和

C# 值相同时不执行LINQ求和,c#,linq,C#,Linq,我需要从2个LINQ查询开始对相同类型的元素进行求和 下面是我的代码: var query1 = from d in _contextProvider.Context.Documents where d.TransportId == transportId group d by d.Type into dg sel

我需要从2个LINQ查询开始对相同类型的元素进行求和

下面是我的代码:

        var query1 = from d in _contextProvider.Context.Documents
                     where d.TransportId == transportId
                     group d by d.Type
                     into dg
                     select new { DocumentType = dg.Key.ToString(), DocumentCount = dg.Count() };

        var query2 = from n in _contextProvider.Context.NotificationDocuments
                     where n.TransportId == transportId
                     group n by n.TransportId
                     into nd
                     select new { DocumentType = "Notification", DocumentCount = nd.Count() };

        var query_collapsed = query1.Union(query2)
                    .GroupBy(p => new { DocumentType = p.DocumentType })
                    .Select(g => new DocumentCounters() { DocumentType = g.Key.DocumentType, DocumentCount = g.Sum(p => p.DocumentCount) });
示例:下面让我们分析
DocumentType
等于
Notification
的值

查询1的值:

查询2的值:

折叠的查询:

这是正确的:1+2=3

问题:我注意到,每当查询1中的
通知
计数等于查询2中的
通知
计数时,就不会执行求和

例如:

2+2=2

3+3=3


有什么想法吗?

LINQ
Union
将删除重复条目。如果要合并这两个序列,可以像这样使用
Concat

var query_collapsed = query1.Concat(query2)
                .GroupBy(p => new { DocumentType = p.DocumentType })
                .Select(g => new DocumentCounters() { DocumentType = g.Key.DocumentType, DocumentCount = g.Sum(p => p.DocumentCount) });

LINQ
Union
将删除重复的条目。如果要合并这两个序列,可以像这样使用
Concat

var query_collapsed = query1.Concat(query2)
                .GroupBy(p => new { DocumentType = p.DocumentType })
                .Select(g => new DocumentCounters() { DocumentType = g.Key.DocumentType, DocumentCount = g.Sum(p => p.DocumentCount) });

LINQ
Union
将删除重复的条目。如果要合并这两个序列,可以像这样使用
Concat

var query_collapsed = query1.Concat(query2)
                .GroupBy(p => new { DocumentType = p.DocumentType })
                .Select(g => new DocumentCounters() { DocumentType = g.Key.DocumentType, DocumentCount = g.Sum(p => p.DocumentCount) });

LINQ
Union
将删除重复的条目。如果要合并这两个序列,可以像这样使用
Concat

var query_collapsed = query1.Concat(query2)
                .GroupBy(p => new { DocumentType = p.DocumentType })
                .Select(g => new DocumentCounters() { DocumentType = g.Key.DocumentType, DocumentCount = g.Sum(p => p.DocumentCount) });

Union
将只保留不同的项。我认为如果要在结果集合中保留重复项,需要使用
Concat
而不是
Union
@JurgenCamilleri是对的,使用
Concat
而不是
Union
,这是正确的。谢谢大家。
Union
将只保留不同的项。我认为如果您想在结果集合中保留重复项,您需要使用
Concat
而不是
Union
。@JurgenCamilleri是对的,使用
Concat
而不是
Union
,这是正确的。谢谢大家。
Union
将只保留不同的项。我认为如果您想在结果集合中保留重复项,您需要使用
Concat
而不是
Union
。@JurgenCamilleri是对的,使用
Concat
而不是
Union
,这是正确的。谢谢大家。
Union
将只保留不同的项。我认为如果您想在结果集合中保留重复项,您需要使用
Concat
而不是
Union
。@JurgenCamilleri是对的,使用
Concat
而不是
Union
,这是正确的。谢谢大家。