首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在实体框架中存在实体SQL参数错误的查询生成器方法

在实体框架中存在实体SQL参数错误的查询生成器方法
EN

Stack Overflow用户
提问于 2016-06-24 19:58:20
回答 3查看 953关注 0票数 2

我试图效仿朱莉娅·勒曼( Julia )的“编程实体框架第二版”(ProgramingEntityFramework2Edition)中的一个例子,下面的代码对我来说是行不通的:

代码语言:javascript
复制
ObjectQuery<Contact> contacts = context.Contacts
                                .Where("it.FirstName = 'Robert'")

我得到以下错误:

Argument2:不能从“string”转换为“System.Linq.Expresions.Expression>”。

如何访问ObjectQuery的查询生成器方法?我使用的是实体框架6,书中的例子是使用实体框架4,我的上下文类继承自DbContext,在本书的示例中上下文类继承自ObjectContext

实体框架6中是否仍然使用查询生成器方法?

EN

回答 3

Stack Overflow用户

发布于 2018-10-30 18:21:18

我的上下文类继承自DbContext,在书中的示例中,上下文类继承自ObjectContext。

首先,您必须将上下文从DbContext更改为如下所示的ObjectContext:

代码语言:javascript
复制
var objectContext = (context as IObjectContextAdapter).ObjectContext;

现在可以使用方法,如下所示:

代码语言:javascript
复制
        var query = objectContext.CreateObjectSet<Customer>().Where("it.FirstName='Robert'").OrderBy("it.LastName");

以下是整个示例:

代码语言:javascript
复制
private static void OrderByAndWhereUsingEntitySQL_AndQueryBuilderMethods()
{
    using (var context = new AWEntities())
    {//using Entity SQL with helper Query Builder Methods
        //dbContext does not have a Where method that accepts esql string statements
        //get to the dbContext's ObjectContext class
        var objectContext = (context as IObjectContextAdapter).ObjectContext;
        //now we can use the Where method that understands esql string statements
        var query = objectContext.CreateObjectSet<Customer>().Where("it.FirstName='Robert'").OrderBy("it.LastName");
        //execute the query
        var customers = query.ToList();
        foreach (var cust in customers)
            Debug.WriteLine(cust.LastName.Trim() + ", " + cust.FirstName);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-06-24 19:59:56

如果要使用字符串,则需要使用参数化,其中需要使用带有值的第二个参数。

我认为直接使用LINQ和lambda表达式是更干净的。

尝试:

代码语言:javascript
复制
ObjectQuery<Contact> contacts =
context.Contacts.Where("it.FirstName = @firstname",
new ObjectParameter("firstname", firstName));
票数 0
EN

Stack Overflow用户

发布于 2018-04-11 18:59:14

标准的Linq查询不为Where提供string类型的重载。

Microsoft提供了一个NuGet库,用于将字符串解析为Lambda表达式,然后在名为NuGet的Linq查询中使用这些表达式,在这里可以找到:

https://www.nuget.org/packages/System.Linq.Dynamic/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38021193

复制
相关文章

相似问题

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