2016-09-30 30 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开始。