![](/img/trans.png)
[英]Use LinqKit PredicateBuilder for related model (EF Core)
[英]PredicateBuilder is not working on EF Core
public string[] FindAssets2()
{
string[] result;
using (var ctx = new StockContext())
{
var predicate = PredicateBuilder.New<Asset>().Or(asset => asset.Symbol.Contains("TSLA"));
result = ctx.Assets.AsExpandable()
.Where(predicate)
.Select(z => z.Symbol)
.ToArray();
}
return result;
}
只是一段簡單的代碼。 它把我扔了
Exception: Unhandled expression type: 'Extension'
LinqKit.ExpressionVisitor.Visit(Expression exp)
LinqKit.ExpressionVisitor.VisitExpressionList(ReadOnlyCollection<Expression> original)
LinqKit.ExpressionVisitor.VisitMethodCall(MethodCallExpression m)
LinqKit.ExpressionVisitor.Visit(Expression exp)
LinqKit.Extensions.Expand(Expression expr)
LinqKit.ExpandableQueryProvider<T>.System.Linq.IQueryProvider.CreateQuery<TElement>(Expression expression)
System.Linq.Queryable.Where<TSource>(IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate)
下面是我安裝的package
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.0-preview.4.20220.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-preview.4.20220.10" />
<PackageReference Include="LINQKit.Core" Version="1.1.17" />
任何幫助將不勝感激。 非常感謝!
似乎 EF-core 5 與AsExpandable
配合得不好。 或者說反過來。 它與 EF3 一起工作,但顯然 Linqkit 對特定於庫的表達式樹特性沒有彈性。
這種情況有一個解決方法。 正如這里所解釋的, predicate
不是一個Expression
,而是一個ExpressionStarter
,它隱式轉換為Expression<Func<T, bool>>
和Func<T, bool>
。 因此,在頂級實體(例如:EF 的IQueryables
)上使用謂詞的查詢在沒有AsExpandable
的情況下工作:
result = ctx.Assets // No '.AsExpandable()' .Where(predicate) // Implicit conversion of 'predicate' to Expression<Func<Asset,boo>l> .Select(z => z.Symbol) .ToArray();
壞消息是,如果在這方面沒有任何修復,您將無法在真正需要時使用AsExpandable
,例如集合導航屬性的謂詞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.