如何将SQL转换为LINQ c(左外连接、字符串数据类型的Null赋值和NVL()转换)

如何将SQL转换为LINQ c(左外连接、字符串数据类型的Null赋值和NVL()转换),linq,linq-to-sql,linq-to-entities,Linq,Linq To Sql,Linq To Entities,我是LINQ的新手。我想将下面的SQL转换成C LINQ 查询: SELECT s.Id, s.Name, s.Phone, s.AssignedClasses, d.name FROM student s INNER JOIN divison d ON s.Id = d.StudentId LEFT OUTER JOIN (SELECT ld.Id, ld.Name, //Datatype = S

我是LINQ的新手。我想将下面的SQL转换成C LINQ

查询:

SELECT s.Id, 
       s.Name, 
       s.Phone, 
       s.AssignedClasses, 
       d.name
FROM student s
INNER JOIN divison d ON s.Id = d.StudentId
LEFT OUTER JOIN
    (SELECT ld.Id, 
            ld.Name, //Datatype = String
            ld.Location, //Datatype = String
            ld.divisonId, 
            ld.lowerRange, 
            ld.upperRange
     FROM LocalDivison ld
     UNION All
     SELECT id.Id, 
            null, 
            null, 
            id.divisonId, 
            null, 
            null
      FROM InternationalDivision id) t
 ON t.divisonId = d.Id
 AND NVL(s.AssignedClasses,0) BETWEEN t.lowerRange AND t.upperRange
这就是我迄今为止所做的:

    var innerQry = (from ld in localdivision
                   select new 
                   {
                     ld.Id, 
                     ld.Name, //Datatype = String
                     ld.Location, //Datatype = String
                     ld.divisonId, 
                     ld.lowerRange, 
                     ld.upperRange
                   }).Union
                   (from id in InternationDivison
                    select new
                    {
                      id.Id, 
                      null, //This throws compile time error. Can't assign string datatype field to null. How to do it?
                      null, //This throws compile time error. 
                      id.divisonId, 
                      null, 
                      null
                    })   

    var students =   from s in student
                     join d in divison on s.Id equals d.StudentId
                     join i in innerQry on i.divisionId = d.Id into temp
                     from final in temp.DefaultIfEmpty()
                     where (s.AssignedClasses ?? 0) >= innerQry.lowerRange && (s.AssignedClasses ?? 0) <= innerQry.upperRange  //I am not sure if I am doing this right.
                     select new
                     {
                       s.Id, 
                       s.Name, 
                       s.Phone, 
                       s.AssignedClasses, 
                       d.name
                     }
我无法为字符串数据类型、左外部联接和NVL函数转换具有null赋值的union

任何帮助都将不胜感激。
谢谢

那么,你走了多远?告诉我们你的进展,恐怕这不是一个代码编写服务。@DavidG,我已经更新了我原来的帖子。LINQ不是SQL的替代品。创建具有关系的适当实体并让您的ORM生成查询,或者创建视图并将您的实体映射到它。Student类应该有一个Division属性和一个Division学生集合。顺便说一句,即使是SQL,这也是一个错误的查询。当国际分工永远不会产生结果时,将其纳入其中有什么意义?其隐含的lowerRange和upperRange字段将始终无法进行比较,因为它们是NULL@PanagiotisKanavos-这只是一个例子。