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

C# 是否将EF原始SQL查询映射到特定属性?,c#,entity-framework,linq,linq-to-entities,C#,Entity Framework,Linq,Linq To Entities,我有一个相当复杂的SQL查询,建议只将其作为原始SQL运行,而不是转换为LINQ。看看这些例子,我必须给它一个对象来制作列表。因此,我创建了一个类,与表列名相比,它具有更好的属性名表示形式。但是,我似乎无法使用这些属性,必须使属性名与数据库的列名匹配 我有一个名为Region的类,它具有以下属性 public string RegionName { get; set; } public string DepartingStation{ get; set; } 但是,DB列名是 REG_NAME

我有一个相当复杂的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();
}

在这种情况下,我建议从原始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();

其中结果将是区域项目的本地通用列表,列表。您可以循环并执行所需的操作。

在这种情况下,我建议从原始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();

其中结果将是区域项目的本地通用列表,列表。您可以循环并使用它做您需要做的事情。

几乎总是最简单的就是更有效的。我建议从原始sql中输出列别名以匹配类属性名称。您的意思是我可以为类中的属性设置一些别名吗?在您的sql查询中,您将不输出REG_名称、DEP_站等,而是将REG_名称作为RegionName,DEP_站作为DepingStation,……你知道有没有办法将所有记录添加到通用列表中?然后我可以循环浏览该列表并填充不同的信息。类似于使用DataSet或DataReader来填充类?是的,当然,实际上您的变量结果将是区域项的本地通用列表,列表。你可以循环并做你需要做的事情。几乎总是最简单的就是更有效的。我建议从原始sql中输出列别名以匹配类属性名称。您的意思是我可以为类中的属性设置一些别名吗?在您的sql查询中,您将不输出REG_名称、DEP_站等,而是将REG_名称作为RegionName,DEP_站作为DepingStation,……你知道有没有办法将所有记录添加到通用列表中?然后我可以循环浏览该列表并填充不同的信息。类似于使用DataSet或DataReader来填充类?是的,当然,实际上您的变量结果将是区域项的本地通用列表,列表。您可以循环并执行您需要执行的操作。如果您无权更改过程,会发生什么情况?在尝试在模型级别进行映射时,我使用了System.ComponentModel.DataAnnotation.Schema[ColumnName],它仍然不起作用。我当然可以使用特定于数据的模型,然后用我想要的任何命名将其转换为我的公共模型,但这似乎是不必要的。我还遗漏了什么吗?多亏了Oracle无用的命名转换,这对我来说不是一个选项:-如果你没有修改过程的权限会发生什么?在尝试在模型级别进行映射时,我使用了System.ComponentModel.DataAnnotation.Schema[ColumnName],它仍然不起作用。我当然可以使用特定于数据的模型,然后用我想要的任何命名将其转换为我的公共模型,但这似乎是不必要的。我还遗漏了什么吗?多亏了Oracle无用的命名转换,这不是我的选择:-