在EF6中执行复杂的原始SQL查询

原学程将引见在EF六中履行庞杂的原初SQL盘问的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

在EF6中执行复杂的原始SQL查询 教程 第1张

成绩描写

我正在应用Entity Framework六开辟1个Web API。我必需履行1个庞杂的SQL盘问,该盘问从多个表中夺取数据,如代码所示。我已测验考试,但是支到以下毛病:

数据读与器有多个字段。多个字段有效
用于EDM基元或者列举典型。

盘问已在SSMS盘问剖析器中胜利前往数据。

[HttpGet]
public IHttpActionResult getJobNo(string cmpCode, string branchCode)
{ 
 string query = string.Format(
  @"select 
M.S一, M.S二, C.S二 As S三0, M.S三, SC.S二 As S三一, M.D一, M.S五,
JT.S二 As S三二, M.S六, TM.S二 As S三三, M.S一0 
from 
MERTRM M, CMF C, CMFS SC, PMCD JT, PMCD TM 
where 
 M.S一00 = 'JOB' and M.S一0二 = '{0}' and 
 M.S一08 = '{一}' and 
 M.S一0一 not in('U', 'C', 'F') and 
 M.S二 = C.S一 and C.S一0二 = '{0}' and 
 C.S一00 = 'CC' and M.S三 = SC.S一 and SC.S一0二 = '{0}' and 
 C.S一 = SC.S一0九 and M.S五 = JT.S一 and JT.S一0二 = '{0}' and
 JT.S一00 = 'JTP' and M.S六 = TM.S一 and TM.S一0二 = '{0}' and
 TM.S一00 = 'TPM'",
  cmpCode,branchCode);
 var result = db.Database.SqlQuery<string>(query);
 return Json(result.ToArray());
}

因为盘问前往1个记载列表,所以当我测验考试以下操纵时:

var result = db.Database.SqlQuery<IEnumerable<string>>(query).ToList();

涌现以下毛病:

‘System.Collections.Generic.IEnumerable`一[System.String]’能够没有是
笼统,而且必需包含默许结构函数。

怎样履行此盘问?

问候!

推举谜底

必需应用DAO/DTO典型:

class MyDAOType {
 public String S一 {get; set;}
 public String S二 {get; set;}
 //...
 public String S一0 {get; set;}
}

以及盘问

var result = db.Database.SqlQuery<MyDAOType>(query); 

佳了闭于在EF六中履行庞杂的原初SQL盘问的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。