【发布时间】:2017-07-01 11:03:57
【问题描述】:
如何将我的 SQL 转换为 LINQ?
DECLARE @cookie nvarchar(50)
SET @cookie = 'test@test.com'
SELECT s.firstname
FROM [examManager].[dbo].[students] AS s
JOIN [examManager].[dbo].tutors t ON s.last_exam IN (t.default_exam_id ,
t.last_exam, t.next_exam)
OR s.next_exam IN (t.default_exam_id , t.last_exam , t.next_exam)
--WHERE t.email = @cookie
我将沿着这条路线走(下面的查询),但与 SQL 结果相比,它并没有带回我需要的东西。我会在 C# 中处理 cookie,这不是问题。
var tStudents = from s in student
join t in tutor on s.last_exam equals t.default_exam_id //{ ColA = s.last_exam, ColB = s.next_exam } equals new { ColA = t.last_exam, ColB = t.next_exam }
join t2 in tutor on s.last_exam equals t2.last_exam
join t3 in tutor on s.last_exam equals t3.next_exam
//where t.email == finalCookie
select new
{
s.firstname,
s.lastname,
};
+++编辑+++ 要使上述方法起作用,请考虑这两个示例表。
导师
------------------------------------------------------------
id |email | |default_exam_id| |last_exam|next_exam
------------------------------------------------------------
0 |test@test.com |903 |910 |903
------------------------------------------------------------
学生
------------------------------------------------------------
id |fname | |last_exam |next_exam
------------------------------------------------------------
0 |john |903 |910
1 |doe |912 |903
2 |gary com |909 |988
------------------------------------------------------------
结果应该如下:
0 |john |903 |910
1 |doe |912 |903
【问题讨论】:
-
我什至不知道这样的 SQL 是可能的:)
-
您能否添加一个数据集示例以及您希望返回哪些数据?只是为了让我们有更全面的了解。
-
就数据而言,@nbokmans 这样做会返回一个 JSON obj: return Json(new { data = data, tStudents = tStudents }, JsonRequestBehavior.AllowGet);然后在客户端上,它是一个向用户显示的数据表。但据我的理解,这无关紧要,因为一旦执行 LINQ 并且客户端不在此阶段,我应该在 tStudents obj 中查看我的行。
-
您在 ON 原因中的条件可能完全在 WHERE 子句中。
-
不,我的意思是现在我不确定您想要的结果是什么。你能把你的查询写成一个句子吗?
标签: c# sql entity-framework linq linq-to-sql