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

C# Linq到实体:参数化原始Sql查询?,c#,sql,sql-server,linq,entity-framework,C#,Sql,Sql Server,Linq,Entity Framework,我正在编写一个WCF服务,它使用EntityFramework6(EF)来查询SQL Server。我的大多数查询方法都是用LINQ编写的。一切都好 我需要写一个参数化的查询。通读一下:这是我到目前为止得到的: public string GetLinkItemValue(string linkTable, string linkItem, string linkGUID) { try {

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

我需要写一个参数化的查询。通读一下:这是我到目前为止得到的:

       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);
          }       
      }
objectResult
返回sql查询字符串值而不是结果


哪里出错了?

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

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

var objectresult = _Context.Database.SqlQuery<string>(
    String.Format("SELECT c.{0} FROM ISESEntities.{1} AS c WHERE c.CCCPGUID= @linkGUID",linkItem,linkTable));
也许您只需要第一个结果(从查询本身判断),在这种情况下,这也应该起作用(因为它枚举了结果)


你犯了什么错误?你能更详细地描述一下吗?如果你不能参数化标识符(比如你的表名或列名),另外你可以检查表名和列名是否有效:是的,我没有告诉查询返回1条记录,所以我理解必须迭代结果集。我现在在“@p0”附近得到一个异常“语法不正确”。@Hardgraf-我会在数据库上粘贴一个探查器,以查看数据库中实际得到的查询。是的,从sql Server探查器跟踪中得到sql语句,并在尝试在SSMS中执行该语句时在参数上得到相同的错误。表名等是正确的,看起来它与's有问题。与架构中相同。@p1
var objectresult = _Context.Database.SqlQuery<string>(
    String.Format("SELECT c.{0} FROM ISESEntities.{1} AS c WHERE c.CCCPGUID= @linkGUID",linkItem,linkTable));
foreach(var item in objectresult)
  // do something
return objectresult.FirstOrDefault();