2015-02-07 19 views
1

我正在使用PredicateBuilder(來自LinqKit)。在帶子集合的投影中使用PredicateBuilder

這是我的代碼:

Dim mylist as IQueryable(of MyObj1) 
Dim pred1 = PredicateBuilder.True(Of Myobj1)() 
Dim pred2 = PredicateBuilder.True(Of ch1)() 
Dim pred3 = PredicateBuilder.True(Of ch2)() 
pred1=pred1.And(Function(t) t.id=5) 
pred2=pred2.And(Function(t1) t1.vl1>=7) 
pred3=pred3.And(Function(t2) t2.quantity<=4) 
mylist = (From t In context.Myobj1s.Where(pred1)Select New With { _ 
    .Parent = t, _ 
    .child1 = t.ch1s.AsQueryable.Where(pred2), _ 
.child2 = t.ch2s.Asqueryable.Where(pred3) _ 
}).ToList 

但我發現了這個錯誤:

The LINQ expression node type 'Invoke' is not supported in LINQ to Entities. 

我也嘗試使用AsExpandable代替AsQueryable已,但問題沒有得到解決。

回答

1

有一個alternative to Linqkit's PredicateBuilder不使用Expression.Invoke。這使得它更適合於由SQL提供者翻譯的謂詞。

如果您使用此謂詞生成器,則可以在不做任何更改的情況下使用您的代碼。

+0

謝謝,但請如何使用此方法?我的意思是有一個我應該安裝的金塊包,我應該包括什麼......等等? , – alex 2015-02-07 20:58:33

+0

不,沒有,不幸的是。您必須將源代碼轉換爲VB代碼(並將其添加到代碼庫中),或者將其編譯爲C#類庫並將其添加爲參考。 – 2015-02-07 21:02:10

+0

這是否也適用於普通的Linq集合,還是僅適用於使用SQL提供者的集合? – 2015-02-07 21:14:52