首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq到实体:参数化原始Sql查询?

Linq到实体:参数化原始Sql查询?
EN

Stack Overflow用户
提问于 2015-01-29 13:54:27
回答 1查看 2.2K关注 0票数 1

我正在编写一个WCF服务,它使用实体框架6 (EF)查询SQL Server。我的大多数查询方法都是用LINQ编写的。一切都很好。

我需要写一个参数化的查询。我读了一遍:http://adicodes.com/entity-framework-raw-sql-queries-and-stored-procedure-execution/,这就是我到目前为止得到的:

代码语言:javascript
复制
       public string GetLinkItemValue(string linkTable, string linkItem, string linkGUID)
       {
         try
         {             
           var LinkItem = new SqlParameter("@linkItem", linkItem);
           var LinkTable = new SqlParameter("@linkTable", linkTable);
           var LinkGUID = new SqlParameter("@LinkGUID", linkGUID);
           var objectresult = _Context.Database.SqlQuery<string>("SELECT c.@linkItem FROM ISESEntities.@linkTable AS c WHERE c.CCCPGUID= @linkGUID");

           return objectresult.ToString();
         }
          catch (Exception)
          {
             return string.Format("There was a problem retrieving the Link Item value for LinkTable[{0}],LinkItem[{1}],LinkGUID[{2}].", linkTable, linkItem, linkGUID);
          }       
      }

这显然是不正确的,并且在c.@linkItem上对查询字符串进行了修改,我已经将查询字符串作为对象结果字符串返回,但似乎不能从查询返回结果。

事实上,即使我简化了查询&删除参数:

代码语言:javascript
复制
var objectresult = _Context.Database.SqlQuery<string>("SELECT a.ArticleTitle FROM ISESEntities.vwArticles AS a where a.ArticleId = 01");

objectResult返回的是sql查询字符串值,而不是结果。

我哪里出问题了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-29 14:01:17

在SQL字符串中,不能参数化列名或表名。

唯一的选择是动态构建SQL字符串以包含这些值。

代码语言:javascript
复制
var objectresult = _Context.Database.SqlQuery<string>(
    String.Format("SELECT c.{0} FROM ISESEntities.{1} AS c WHERE c.CCCPGUID= @linkGUID",linkItem,linkTable));

然后,当然,删除这些参数在其他地方。

至于第二个问题,文档告诉我们

创建此对象时不执行查询;每次枚举时都执行查询,例如使用foreach。

因此,您必须枚举它以查看执行查询的结果。

代码语言:javascript
复制
foreach(var item in objectresult)
  // do something

也许您只想要第一个结果(从查询本身判断),在这种情况下,这也应该工作(因为它枚举结果)。

代码语言:javascript
复制
return objectresult.FirstOrDefault();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28216468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档