【问题标题】:Inner join using SqlQuery with Entity Framework in MVC在 MVC 中使用带有实体框架的 SqlQuery 进行内部连接
【发布时间】:2018-10-07 12:03:41
【问题描述】:
var getdata = (DB.books.SqlQuery("select * 
                                  from book 
                                  inner join allclass on allclass.id = book.class_id_fk
                                  inner join universty on universty.id = allclass.universty_id_fk")
              ).ToList();

我想在实体框架中运行此 SQL 查询以连接表数据 - 我该怎么做?

使用 linq 查询的另一种方法,但我想使用实体框架通过 SQL 查询获取数据

【问题讨论】:

  • 您是否要使用 LINQ 将上述连接查询转换为实体(lambda 或查询表达式)?请进一步说明您想要实现的目标。
  • 我知道如何加入 LINQ 查询,但我想加入 sql 查询,因为我在上面编写代码
  • 您的示例代码已经有一个带有inner join 的SQL 查询。我不明白这个问题

标签: sql-server asp.net-mvc entity-framework


【解决方案1】:

如果查询的结果不是 book 类型,则不能使用 DB.books。当原始 sql 的返回类型不是数据库中的任何实体类型时,您必须改为使用 DB.Database 类。

按照以下步骤操作:

1) 创建一个与您的输出列列表匹配的模型,如下所示。

public class MyModel
{
    public string Column1{ get; set; }
    public decimal Column2{ get; set; }
    ...
}

2) 如下所示更改您的查询。

var getdata = (DB.Database.SqlQuery<List<MyModel>>("select Column1,Column2.. //List all the columns instead of using * 
                                  from book 
                                  inner join allclass on allclass.id = book.class_id_fk
                                  inner join universty on universty.id = allclass.universty_id_fk")
              );

【讨论】:

  • DB.database 是什么意思,因为我不知道这个?
  • DB.Database 是实体框架暴露的一个类。此类具有 SqlQuery 方法,在为非实体类型编写原始 sql 时应使用该方法。有关详细信息,请参阅docs.microsoft.com/en-us/ef/ef6/querying/raw-sql
  • 我正在执行这个简单的查询 var get = DB.Database.sqlquery("Select * from book").tolist() 并收到此错误...... .....数据读取器有多个字段。多个字段对 EDM 基元或枚举类型无效。
  • 在您的查询中,您试图获取 book 表的所有列并告诉编译器输出将是字符串类型。请在docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…阅读有关 C# 中泛型的更多信息。
猜你喜欢
  • 2013-10-18
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多