实体框架6在Select语句中存储函数

时间:2016-10-28 09:32:44

标签: c# entity-framework linq

我在LINQ to SQL中有一个连接查询,如下所示:

from t in d.MainTable
               join t1 in Db.JoinedTable1 on t.jid1 equals t1.Id into t11
               from t12 in t11.DefaultIfEmpty()
               join t2 in Db.JoinedTable2 on t.jid2 equals t2.Id into t21
               from t22 in t21.DefaultIfEmpty()                   
               select new Dto
               {
                   Field1 = t.Field1,
                   Field11 = t12.Name,
                   Field2 = t.Field2,
                   Field3 = Db.Database.SqlQuery<string>("select dbo.f_MyFunction('val', 4)").FirstOrDefault()
               };

但是我收到了错误:

  

LINQ to Entities无法识别方法&#39; System.Data.Entity.Infrastructure.DbRawSqlQuery`1 [System.String] SqlQuery [String](System.String,System.Object [])&#39;方法,并且此方法无法转换为商店表达式。

可以在select语句中使用存储函数吗?或者我如何使用属性映射到存储函数的类?

已编辑。我的DbContext类中的命名空间用法:

using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.SqlClient;
using System.Linq;

2 个答案:

答案 0 :(得分:0)

this answer我找到了解决方案。我在CodeConvention中使用CodeFirstStoreFunctions nuget包。

答案 1 :(得分:-1)

而不是SqlQuery尝试这个CreateQuery有点像

    Field3 =  Db.Database.CreateQuery<string>("SELECT Db.Database.f_MyFunction(@someParameter1) FROM {1}", new ObjectParameter("someParameter", someParameter)).FirstOrDefault();