我有一个相当复杂的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();
}
答案 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>.
您可以循环并执行您需要执行的操作。