将EF原始SQL查询映射到特定属性?

时间:2016-01-06 19:33:32

标签: c# entity-framework linq linq-to-entities

我有一个相当复杂的SQL查询,而不是转换为LINQ,建议只将其作为Raw SQL运行。看一下这些例子,我必须给它一个对象来制作一个列表。所以我创建了一个类,它具有更好的属性名称和表列名称。但是,我似乎无法使用这些属性,并且必须使属性名称与数据库的列名称匹配。

我有一个名为Region的类具有以下属性

public string RegionName { get; set; }
public string DepartingStation{ get; set; }

但是,DB列名称是

REG_NAME
DEP_STATION

如果我的属性名称与DB列相同,则返回结果。但是,我更愿意向我们提供更好的代表属性名称。有没有办法可以将类属性名称映射到特定的DB字段?

using (ApiDbContext db = new ApiDbContext())
{
var results = db.Database.SqlQuery<Region>(sbQuery.ToString()).ToList();
}

1 个答案:

答案 0 :(得分:4)

在这种情况下,我建议从raw sql输出列别名以匹配类属性名称。所以如果你有:

public class Region {
    public string RegionName { get; set; }
    public string DepartingStation{ get; set; }
}

然后你写这样的原始SQL:

var subquery = @"
select 
 REG_NAME as RegionName,
 DEP_STATION as DepartingStation
from Table1"

有了这个,你可以安全地打电话:

var results = db.Database.SqlQuery<Region>(subquery).ToList();

其中结果将是区域项的本地通用列表,List<Region>.您可以循环并执行您需要执行的操作。