【发布时间】:2017-10-01 04:45:00
【问题描述】:
我在 SQL 中得到了这个:
具有 3 个值:value1、value2、value3
SELECT A.a, A.b, E.c, B.d, A.e, A.f, A.g, D.h, D.i
FROM Alpha as A
INNER JOIN Beta as B ON A.b = B.k
LEFT OUTER JOIN Charlie as C ON C.a = A.a
LEFT OUTER JOIN Delta as D ON D.k = B.j
INNER JOIN Echo as E ON A.a = E.a
WHERE A.a = @value1 AND E.c = @value2 AND (A.a = @value3 OR @value3 = '') AND A.b = E.b
Alpha、Beta、Charlie、Delta 和 Echo 有字符串 a,b,c,d,e,f,g,h,i,j,k。
我已尝试转换为 Linq,但我没有正确理解 join 的语法。你能告诉我它应该是什么样子吗? x)
public static List<value> GetSmthn(string value1, string value2, string value3)
{
return (
from A in Alpha
join B in Beta on A.b equals B.k
join C in Charlie on A.a equals C.a
join D in Delta on B.j equals D.k
join E in Echo on E.a equals A.a
where (A.a == value1 && E.c == value2 && (A.a == value3 || value3 == "") && A.b == E.b)
select new value() { a = A.a, b = A.b, c = E.c, d = A.d, e = A.e, f = A.f, g = A.g, h = D.h i = D.i }
).ToList();
}
感谢您的帮助,也许这有点令人困惑。因为我更改了变量名。 对不起,英语不好顺便说一句
【问题讨论】:
-
您可能需要查看this MSDN 以了解 linq 中的左连接。看来您必须使用群组加入并使用
DefaultIfEmpty -
您应该检查
DefaultIfEmpty选项并加入。检查下面的链接以获取有关联接的更多信息。 msdn.microsoft.com/en-us/library/bb311040.aspx -
这就是问题所在,我在 MDSN 上没有得到它。我不知道为什么,我无法理解,所以我寻求帮助:D
-
它在 MSDN 上,检查我提供的链接并通过左外连接部分。
-
我知道理论,但我不知道如何在我的代码中使用它。
标签: c# sql linq left-join inner-join