我试图效仿朱莉娅·勒曼( Julia )的“编程实体框架第二版”(ProgramingEntityFramework2Edition)中的一个例子,下面的代码对我来说是行不通的:
ObjectQuery<Contact> contacts = context.Contacts
.Where("it.FirstName = 'Robert'")我得到以下错误:
Argument2:不能从“string”转换为“System.Linq.Expresions.Expression>”。
如何访问ObjectQuery的查询生成器方法?我使用的是实体框架6,书中的例子是使用实体框架4,我的上下文类继承自DbContext,在本书的示例中上下文类继承自ObjectContext。
实体框架6中是否仍然使用查询生成器方法?
发布于 2018-10-30 18:21:18
我的上下文类继承自DbContext,在书中的示例中,上下文类继承自ObjectContext。
首先,您必须将上下文从DbContext更改为如下所示的ObjectContext:
var objectContext = (context as IObjectContextAdapter).ObjectContext;现在可以使用方法,如下所示:
var query = objectContext.CreateObjectSet<Customer>().Where("it.FirstName='Robert'").OrderBy("it.LastName");以下是整个示例:
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);
}
}发布于 2016-06-24 19:59:56
如果要使用字符串,则需要使用参数化,其中需要使用带有值的第二个参数。
我认为直接使用LINQ和lambda表达式是更干净的。
尝试:
ObjectQuery<Contact> contacts =
context.Contacts.Where("it.FirstName = @firstname",
new ObjectParameter("firstname", firstName));发布于 2018-04-11 18:59:14
标准的Linq查询不为Where提供string类型的重载。
Microsoft提供了一个NuGet库,用于将字符串解析为Lambda表达式,然后在名为NuGet的Linq查询中使用这些表达式,在这里可以找到:
https://stackoverflow.com/questions/38021193
复制相似问题