C# linq以动态大小连接两个列表
我有两个列表,C# linq以动态大小连接两个列表,c#,.net,linq,C#,.net,Linq,我有两个列表,列表集合和列表发票。两者都有一个CurrencyID字段和一个Value字段。我需要的是按currencyID对这两个列表进行分组,并将收集的值减去发票值。这只是在匹配的情况下,否则,无论在哪个列表中有不匹配项,我都需要它在最终列表中。例如: invoices collections final 30 EUR 10 USD 10 EUR 40 CAN 20 EUR
列表集合
和列表
发票。两者都有一个CurrencyID字段和一个Value字段。我需要的是按currencyID对这两个列表进行分组,并将收集的值减去发票值。这只是在匹配的情况下,否则,无论在哪个列表中有不匹配项,我都需要它在最终列表中。例如:
invoices collections final
30 EUR 10 USD 10 EUR
40 CAN 20 EUR 40 USD
50 USD 50 JPN 40 CAN
50 JPN
给定以下类别和列表:
class Collection { public string CurrencyID; public Int32 Value; }
class Invoice { public string CurrencyID; public Int32 Value; }
...
List<Collection> collections = new List<Collection> {
new Collection() {CurrencyID="USD", Value=10},
new Collection() {CurrencyID="EUR", Value=20},
new Collection() {CurrencyID="JPN", Value=50}
};
List<Invoice> invoices = new List<Invoice> {
new Invoice() {CurrencyID="USD", Value=50},
new Invoice() {CurrencyID="EUR", Value=30},
new Invoice() {CurrencyID="CAN", Value=40}
};
结果
foreach、linq、join、group…无法正确处理
var result1 = (from i in invoices
let o = collections.SingleOrDefault(x => x.CurrencyID == i.CurrencyID)
select new
{
CurrencyID = i.CurrencyID,
Value = i.Value - (o != null ? o.Value : 0)
}).ToList();
var result2 = from c in collections
where !result1.Any(x => x.CurrencyID == c.CurrencyID)
select new
{
CurrencyID = c.CurrencyID,
Value = c.Value
};
var result = result1.Union(result2).OrderBy (r => r.Value);