2010-05-06 4 views
1

Вот SQL я хотел бы работать:Как написать этот SQL средний запрос в LINQ

DECLARE @StartDt DATETIME, @EndDt DATETIME 
SET @StartDt='2009-01-01' 
SET @EndDt='2010-06-01' 

SELECT 
AVG(DATEDIFF(day, CreatedDt, CompletedDt)) 
AVG(DATEDIFF(day, CreatedDt, ComplianceDt)) 
FROM MyTable 
WHERE RequestDt BETWEEN @StartDt AND @EndDt 

Может ли это быть выражено в Linq (C#) и он все работать на базе данных?

ответ

3
DateTime startDt = new DateTime(2009, 1, 1); 
DateTime endDt = new DateTme(2010, 6, 1); 

var query = dc.MyTables 
    .Where(x => startDt <= x.RequestDate && x.RequestDt <= endDt) 
    .GroupBy(x => 1) //unsure about this group by 
    .Select(g => new 
    { 
    FirstAvg = g.Average(x => 
     SqlMethods.DateDiffDay(x.CreatedDt, x.CompletedDt)), 
    SecondAvg = g.Average(x => 
     SqlMethods.DateDiffDay(x.CreatedDt, x.ComplianceDt)) 
    }); 

var row = query.Single(); 
+0

приятно .. но что не так с запросом? –

+0

Что случилось с монголами? –

+0

Wow ... Не кажется, что SQL-запрос был намного проще: -) .... В любом случае отличная работа. +1 – Raja

Смежные вопросы