如何解决如何使用基于 SQL 查询的连接在 C# 中编写 LINQ?
我需要根据以下查询编写一个 linq。
在 SQL Server 中,
select EXID,ID,NAME
from Table1 A
join Table2 B on A.BXID = B.BID
left outer join Table3 C ON C.AXID = A.ID
AND C.EXID = (some number/NULL)
这给了我 300 条记录
在 LINQ 中,
try
{
using (var context = new cltransformationContext())
{
var Details = (
from A in context.Table1
join B in context.Table2 on A.BXID equals B.BID
join C in context.Table3 on A.ID equals C.AXID
select new Table1()
{
ID = A.ID,name = A.NAME + '-' B.Name
}).ToList();
return Details;
}
}
我在这里得到了 5000 条记录。
我错过了左外连接和C.EXID = (some number/NULL)条件。 如何在查询中做到这一点?
我应该只得到 300 条记录。
解决方法
此查询将创建 LEFT JOIN:
var query =
from A in context.Table1
join B in context.Table2 on A.BXID equals B.BID
from C in context.Table3.Where(C => A.ID == C.AXID && C.EXID == ...).DefaultIfEmpty()
select new Table1
{
ID = A.ID,name = A.NAME + '-' B.Name
};
,
应该这样做
var query =
from A in context.Table1
join B in context.Table2 on A.BXID equals B.BID
join table3 in context.Table3.Where(X => x.EXID = 123) on A.ID == table3.AXID into table3Joined
from C in table3Joined.DefaultIfEmpty() // this is how we do the left join
select new Table1
{
ID = A.ID,name = A.NAME + '-' B.Name
};
复杂性在于我们必须将连接放入 table3Joined
中,然后我们才能执行 from C in table3Joined.DefaultIfEmpty()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。