2016-09-30 64 views
0

林與實體框架版本6.1.3工作,我想執行一個SQL查詢 從多個表收集的信息是這樣的:EF:如何執行多個連接的SQL查詢?

var result = context.Database.SqlQuery<SomeType>("SELECT SUM(d.PurchaseValue) AS 'Total', div.Name, l.Name " + 
                "FROM Device AS d " + 
                "RIGHT JOIN Location AS l " + 
                "ON d.LOCATION_ID = l.ID " + 
                "RIGHT JOIN Division AS div " + 
                "ON d.DIVISION_ID = div.ID " + 
                "GROUP BY div.Name, l.Name " + 
                "ORDER BY l.Name"); 

我的問題是,應該是什麼類型的類SqlQuery < >?或者,執行這樣的查詢並從中獲得結果的正確方法是什麼?

+0

任何類型的名稱相同類型匹配特性和在結果集中的列(共,名稱等)。 – Evk

+0

*什麼是正確的方式來執行這樣的查詢*你應該使用linq –

+0

不int工作? –

回答

1

嗨福利局

這裏Type可以是任何類型且具有匹配列的名稱從查詢返回的性能。

對於實例

查詢返回列

總|名稱

所以,你的返回類型可以像下面

public class Sample 
{ 
    public string Name { get; set; } 
    public decimal Total { get; set; } 
} 

您查詢條件的通話將被

var result = context.Database.SqlQuery<List<Sample>>(...); 
+0

嗨,即使在我的查詢中使用GROUP BY子句,Sample類是否會像那樣? –

+0

示例類應包含應與您的查詢返回的列名稱相匹配的屬性。它不涉及GROUP BY –

+0

但是這個查詢返回很多記錄,它怎麼能適合這個模型? –

1

你見過檢查Data Development Center的方法嗎?

注意'實體框架允許您使用實體類使用LINQ進行查詢。但是,有時可能需要直接對數據庫使用原始SQL運行查詢。'

所以如果可以的話,使用LINQ。檢查herehere開始。