Jon*_*ood 6 c# linq entity-framework
我想定义一个Func<ProductItemVendor, bool>名为的过滤器表达式CompareProductItemVendorIds,它可以在我的整个应用程序中使用,主要是在实体框架/LINQ 查询中。
我了解到,为了能够在LINQ查询中使用此过滤器,我必须按照其声明Expression<Func<>>,而不是只Func<>。我了解这样做的原因,而且我很容易做到这一点。
但是我在查询中使用该表达式时遇到了以下问题。
首先,代码如:
ProductItem.ProductItemVendors.FirstOrDefault(CompareProductItemVendorIds)
Run Code Online (Sandbox Code Playgroud)
注意:ProductItem是一个数据库实体,它的ProductItemVendors属性是一个导航集合。
产生错误:
`实例参数:无法从“System.Collections.Generic.ICollection”转换为“System.Linq.IQueryable”
其次,代码如:
var results = from v in Repository.Query<ProductItemVendor>()
where CompareProductItemVendorIds(v)
select v;
Run Code Online (Sandbox Code Playgroud)
产生错误:
'CompareProductItemVendorIds' 是一个“变量”,但像“方法”一样使用
所以我有我漂亮闪亮的新Expression<Func<>>。如何在我的 LINQ 查询中使用它?
ProductItem已经是一个Entity,所以你不能使用你的表达式,你需要使用CompileFunc<> ()从你的中获取Expression<Func<>>,因为 ProductItemVendors 不再是一个IQueryable
ProductItem.ProductItemVendors.FirstOrDefault(CompareProductItemVendorIds.Compile())
Run Code Online (Sandbox Code Playgroud)
您必须在 ProductItemVendorsContext 上使用表达式,如下所示:
var item = Context.ProductItemVendors.FirstOrDefault(CompareProductItemVendorIds);
Run Code Online (Sandbox Code Playgroud)
您不能在查询语法中使用表达式,您需要使用方法 sytanx
var results = from v in Repository.Query<ProductItemVendor>()
.Where(CompareProductItemVendorIds)
select v;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3797 次 |
| 最近记录: |