如何将SQL转换为LINQ c(左外连接、字符串数据类型的Null赋值和NVL()转换)
我是LINQ的新手。我想将下面的SQL转换成C LINQ 查询:如何将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
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-这只是一个例子。