【发布时间】:2016-03-09 10:24:43
【问题描述】:
我正在使用System.Data.Entity 命名空间,因此我可以将 lambda 表达式传递给 Linq Include 方法。
public ICollection<MyEntity> FindAll()
{
using (var ctx = new MyEntityContext())
{
return ctx.MyEntity.Include(x => x.SomeLazyLoadedValue).ToList();
}
}
当我在不同的方法中使用 Where 语句时,我可以像这样向它传递一个参数:
public ICollection<MyEntity> FindAllBy(Func<MyEntity, bool> criteria)
{
using (var ctx = new MyEntityContext())
{
return ctx.MyEntity.Where(criteria).ToList();
}
}
但是,在 Include 中尝试同样的事情是行不通的:
public ICollection<MyEntity> FindAll(Func<MyEntity, bool> criteria)
{
using (var ctx = new MyEntityContext())
{
return ctx.MyEntity.Include(criteria).ToList();
}
}
如果你尝试这个,Visual Studio 会抱怨它
Cannot convert from 'System.Func<MyEntity, bool>' to 'string'
如何将 lambda 传递给 Include 方法?
【问题讨论】:
-
因为
Include()extension method you intend to invoke 接受Expression<Func<T, TProperty>> path,而不是Func<T, bool>。 -
@CodeCaster 是正确的。您看到的错误是因为
Include()扩展方法具有接受string的重载。
标签: c# entity-framework linq