繁体   English   中英

如何将其转换为LINQ?

[英]How do I turn this into LINQ?

如何将我的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

这甚至是您想要的东西附近吗? 根据您在OP的评论中的描述,我已尽力而为。

List<string> students =
    studentList.Where(
            s =>
                tutorList.Any(
                    t =>
                        t.last_exam == s.last_exam || t.next_exam == s.last_exam ||
                        t.default_exam_id == s.last_exam || t.last_exam == s.next_exam ||
                        t.next_exam == s.next_exam || t.default_exam_id == s.next_exam))
        .Select(n => n.firstname + " " + n.lastname)
        .ToList();

扩展我的评论:

我认为从语义上将条件放在where子句中也更正确。

var tStudents = from s in student
                from t in tutor
                where (s.last_exam == t.default_exam_id || s.last_exam == t.last_exam || s.last_exam == t.next_exam
                || s.next_exam == t.default_exam_id || s.next_exam == t.last_exam || s.next_exam == t.next_exam)
                //&& t.email == finalCookie
                select new
                {
                    s.firstname,
                    s.lastname,
                };

更新:

var result = tStudents.Distinct();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM