0
        var query1 = from l in context.Logs
                    where l.LogID == maxid
                    select l;
        int count1 = query1.Count();

        var query2 = from ld in context.LogDetails
                     where ld.LogID == maxid
                     select ld;
        int count2 = query2.Count();

        Assert.AreEqual(1,count1);
        Assert.AreEqual(0,count2);

我希望我能以更好的方式编写上述查询。如果我使用的是 TSQL,我可以使用 OUTER JOIN 和过滤器来查看 ld.LogID 是否为空。但我不知道如何在 LINQ 中做到这一点。有什么办法可以清理这个吗?

感谢您的帮助。

4

2 回答 2

3

在 LINQ 中可以进行外部连接

var query = from log in context.Logs
            join logDetail in context.LogDetails
                on log.LogID = logDetail.LogID into lj
            from item in lj.DefaultIfEmpty()
            select new { log.LogID, MissingDetails = lj == null };
于 2012-05-07T22:51:30.470 回答
0

这是使用导航属性的外部联接:

from log in context.Logs
from logDetail in log.LogDetails.DefaultIfEmpty()
select new {log, logDetail}

不要忘记测试 logdetail 是否为空。

于 2012-05-08T01:11:23.160 回答