2010-04-22 63 views
2

我有兩個表(TABLE1,TABLE2-我知道唯一),它們分別具有一對多關係和兩個表的ID列之間的外鍵。如何使用謂詞生成器與linq2sql和OR運算符

使用LINQ2SQL我想選擇所有TABLE1項,使得其相應的TABLE2值包含在我通過它的列表中至少1項。

下面是我用一些示例代碼中LINQPad(真棒程序)來測試它不過正在錯誤NotSupportedException異常:用於查詢操作「任何」不支持過載。

long[] items = { 3, 5, 8 }; 
var predicate = PredicateBuilder.False<TABLE2>(); 

foreach (long i in items) 
{ 
    long t = i; 
    predicate = predicate.Or(att => att.ID == t); 
} 

//TABLE2.Where(predicate).Dump(); //works like a charm 

IQueryable query = 
    from t1 in TABLE1 
    where t1.TABLE2.AsQueryable().Any(predicate) //problem with this line 
    select a; 

query.Dump(); 

UPDATE

當使用LinqKit在LinqPad添加參考LinqKit.dll,取消包含PredicateBuilder然後還附加命名空間進口標籤下添加LinqKit。

+0

在這裏找到了類似的問題http://stackoverflow.com/questions/2522079/generated-sql-with-predicatebuilder-linqpad-and-operator-any。沒有在VS中進行過測試,但似乎可能是我在LINQPad中編寫它的問題。 – David 2010-04-22 11:53:06

回答

2

解決方法是在TABLE1 對象

  • 呼叫編譯()

    1. 呼叫AsExpandable()上表達 變量,上EntitySet的使用時。

    因此,最終的查詢是

    IQueryable query = 
        from t1 in TABLE1.AsExpandable() 
        where t1.TABLE2.Any(predicate.Compile()) //the problem should disappear 
        select a; 
    

    更多信息here