将EF原始SQL查询映射到特定属性
本文关键字:属性 映射 查询 EF 原始 SQL | 更新日期: 2023-09-27 18:29:18
我有一个相当复杂的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();
}
在这种情况下,我建议从原始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();
其中results将是Region项的本地通用列表,List<Region>.
您可以循环并执行需要执行的操作。