【发布时间】:2016-03-09 09:12:58
【问题描述】:
我的任务是使用 Groupby、Orderby、Date 函数将以下 SQL 查询转换为 LINQ。
SELECT
sd.name, s.BuilderName,
Min(Date) as MinDatetime,
Max(Date) as MaxDatetime,
datediff(day, min(Date), max(Date))/ cast (count(sd.jobRobosname) as float)
FROM
[Data] sd
JOIN Example s ON s.name= sd.Name
WHERE jobRobosjobid='NOT RUN'
GROUP BY sd.name, s.name
我试过了,
(from record in _db.Data
join jobRobos in _db.Example on record.Name equals Example.Name
where record.jobRobos jobid != "NOT RUN"
group jobRobos by new {record.Name,jobRobos .BuilderName} into r
select new
{
jobRobos Name = r.Key.jobRobos Name,
BuilderName = r.Key.BuilderName,
MaxDate = r.Key.Min(r.Date),
MinDate = r.Max(c => c.Date),
Diff = r.Key.datediff(day, MinDate, MaxDate) / r.Key.Cast(Count(r.Key.jobRobos Name) as float)
}).ToList();
我在这里提到了一些类似的问题,例如:
- How to convert SQL query into LINQ
- Convert SQL query into linq to entities
- Convert SQL query into LINQ query in VB
- Translate SQL Query into LINQ Query
但找不到解决方案。
谁能给我一些建议?
【问题讨论】:
-
您能说明您遇到的错误吗?
-
将错误文本声明为
AnanymousType Error -
您已经为 mySQL 和 SQL Server 添加了标签。你用的是哪个?如果是后者,那么您可以使用
SqlMethods.DateDiffDay- 请参阅MSDN -
你的sql有错误..因为你不能使用
sd.spidername..它不在groupby子句中 -
对所有此类问题的标准评论:LINQ 不是 SQL,并且像这样使用它是一种主要的气味。它不是 SQL 的替代品,L2S 或 EF 也不是。 ORM 应该将实体映射 到表,而不是作为 SQL 的替代品。创建适当的实体和映射并使用LINQ查询实体。报告式查询根本不应该涉及 ORM,因为不涉及任何对象/实体
标签: c# sql-server vb.net linq