代码之家  ›  专栏  ›  技术社区  ›  Caverman

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

  •  2
  • Caverman  · 技术社区  · 10 年前

    我有一个相当复杂的SQL查询,建议将其作为原始SQL运行,而不是转换为LINQ。看看这些例子,我必须给它一个对象,从中列出一个列表。因此,我创建了一个类,与表列名相比,它具有更好的属性名称表示。然而,我似乎无法使用这些属性,必须使属性名与数据库的列名匹配。

    我有一个名为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 回复  |  直到 10 年前
        1
  •  5
  •   E-Bat    10 年前

    在这种情况下,我建议从原始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>. 你可以循环并做你需要做的事情。