2011-09-08 153 views
7

我有一個表叫visit有以下欄目:轉換SQL查詢LINQ

visit_Id 
member_Id 
visit_Date 
visit_Time 
visit_DateTime 
visit_Status values like (accepted, refused) 

我有以下SQL查詢:

string sql = @"SELECT CONCAT(UPPER(SUBSTRING(visit_Status, 1, 1)), SUBSTRING(visit_Status FROM 2)) as Status, COUNT('x') AS Visits 
    FROM visits 
    WHERE visit_Date BETWEEN '2001-09-08' AND '2009-09-09' 
    GROUP BY visit_Status"; 

我如何轉換這個SQL到LINQ?我的實體名稱是dbcontext。預先感謝您的幫助。

回答

5

您需要使用EntityFunctions

DateTime dateFrom = new DateTime(2001, 9, 8); 
DateTime dateTo = new DateTime(2001, 9, 9); 

var query = from v in dbcontext.Visits 
      where v.visit_Date >= dateFrom && v.visit_Date <= dateTo 
      group v by v.visit_Status into vg 
      select new 
      { 
       Status = EntityFunctions.Concat(EntityFunctions.ToUpper(vg.Key[0]), 
               EntityFunctions.SubString(1, EntityFunctions.Length(vg.Key) -1), 
       Visits = vg.Count() 
      } 
+0

我第二。猜猜我錯過了'x'想要的東西,但是這樣做會很好。 –

+0

@Aducci非常感謝現在的工作...... –

+0

@cubicle我在圖表中顯示這些數據...所以我想在圖表中顯示成員數量和狀態... count(x)是訪問次數。 .... –

1

你能告訴我你在用Count('x')做什麼嗎?

from v in dbcontext.visits 
where v.visit_Date >= "2001-09-08" && v.visitDate <= "2009-09-09" 
group by v.visit_Status 
select new 
{ 
    Status = string.Concat(char.ToUpper(v.visit_Status[0], v.visit_Status.Substring(1)), 
    Visits = //Not sure what 'x' is in your example 
} 
+0

對不起更具體是什麼「X」,因爲我沒有看到您的表稱爲訪問。 –