2011-05-02 31 views
1

我怎麼能這種方法轉換爲表達我可以在使用LINQ到實體:轉換爲表達

public bool IsMatch(long additionId) 
    { 
     return AdditionsPrices.Any(x => x.AdditionId == additionId); 
    } 

謝謝!

+0

歡迎光臨。問題是什麼? – BrunoLM 2011-05-02 02:59:30

+0

@BrunoLM:我不知道如何將此方法轉換爲可以在linq上執行到實體框架查詢中的實體的表達式。 – Naor 2011-05-02 03:00:33

回答

3

這就是:

List<long> additionIds = AdditionsPrices.Select(x => x.AdditionId) 
             .ToList(); 

,然後在EF Contains()查詢使用解決方案:

public Expression<Func<Addition, bool>> IsMatch(long additionId) 
    { 
     return a => a.AdditionsPrices.Any(x => x.AdditionId == additionId); 
    } 
0

爲什麼你不只是做了一個contains()查詢,而不是 - 提取List<long>AdditionsPrices

var results = context.SomeEntitySet 
        .Where(x => additionIds.Contains(x.AdditionId)); 
+0

我打算寫一個使用IsMatch方法的查詢。但我總是得到這樣的例外,即實體不能識別該方法。所以我想創建一個返回表達式的新的IsMatch方法。你可以在這裏看到更多關於我的問題:http://stackoverflow.com/q/5845993/289246 – Naor 2011-05-02 03:06:50

+0

這將需要在你的情況下將非基元類型('AdditionsPrices')的列表轉移到SQL - 我不'我認爲這是行得通的 - 當然我可能是錯的。 – BrokenGlass 2011-05-02 03:10:44

+0

所以你告訴有沒有辦法解決在.NET 4.0中的這個問題? – Naor 2011-05-02 03:17:27