Linq外左连接我做错了什么?

时间:2017-07-25 18:02:57

标签: c# linq

reportMessages已从报告中收到 从存储中读取cleandirs。 我试图验证报告的内容 为此,我正在reportmessages和存储数据

进行外部加入

我将列表限制为100,仍然是m.count = 213

我做错了什么?

var q = from r in reportMessages.Take(100)
        join pp in cleanNoDirs.Take(100)
        on r.FileName equals ("{:D2}{:D2}-{}.ps".format(pp.NameMin, pp.NameSec, pp.CameraMAC))
        into ps
        from p in ps.DefaultIfEmpty()
        select new {
            Uploaded = p,
            Orig = r
        };
var m = q.ToList();

1 个答案:

答案 0 :(得分:0)

您将从每个表中检索到的记录限制为100,但如果您的关系为一个或多个,那么join的结果将超过100个记录。在最坏的情况下,如果第一个集合中的每个记录都与第二个集合中的所有记录匹配,那么您的结果中将获得100 * 100条记录。

相反,在实现ToList限制为100的结果之前:

var result = (from r in reportMessages
              join pp in cleanNoDirs
              on r.FileName equals ("{:D2}{:D2}-{}.ps".format(pp.NameMin, pp.NameSec, pp.CameraMAC)) into ps
              from p in ps.DefaultIfEmpty()
              select  new {
                  Uploaded = p,
                  Orig = r
              }).Take(100).ToList();