Linq - 通过合并结果加入群组

Linq - Join with group by merging results

我正在尝试将两个表的结果合并到一个列表中,然后将其显示在字典中,其中键是域,值是两个表中的 url 列表。

class Source1Entity { string Domain {get;} string PageUrl {get;} /* more properties */ }
class Source2Entity { string Domain {get;} string PageUrl {get;} /* more properties */ }

我已经做到了:

Dictionary<string, List<string>> results = 
     from firstSource in context.Source1
     join secondSource in context.Source2 on firstSource.Domain equals secondSource.Domain
     group firstSource by firstSource.Domain into g
     ...

您需要一个 GroupJoin。 试试这个...

join  secondSource in context.Source on firstSource.Domain equals secondSource.Domain into group_join

还不完全清楚,但我 怀疑 你实际上想将这两个表视为等价物 - 所以你可以投影到通用形式然后使用 Concat , 然后调用 ToLookup:

var projectedSource1 = context.Source1.Select(x => new { x.Domain, x.PageUrl });
var projectedSource2 = context.Source2.Select(x => new { x.Domain, x.PageUrl });
var results = projectedSource1
    .Concat(projectedSource2)
    .ToLookup(x => x.Domain, x => x.PageUrl);

然后:

// For a particular domain - you'll get an empty sequence it the
// domain isn't represented
foreach (var url in results[domain])

foreach (var entry in results)
{
    Console.WriteLine("Domain: {0}", entry.Key);
    foreach (var url in entry)
    {
        Console.WriteLine("  Url: {0}", url);
    }
}

虽然您可以为此使用 Dictionary,但 Lookup 通常更适合单键多值查询。