2013-04-29 79 views
0

我創建了一個小的測試類,它從xml文件返回數據。Linq使用謂詞不起作用

我現在想使它更加動態使用LINQ,但無法讓它工作。

public class LenderCollection 
{ 
    string fileName = "C:\\Lenders.xml"; 

    public IEnumerable<Lender> Lenders { get; set; } 

    public void FetchLenders(Expression<Func<Lender, bool>> predicate = null) 
    { 
     IEnumerable<Lender> lenders = XmlHelper.GetObjectFromXml<List<Lender>>(fileName, "AllLenders"); 

     Lenders = predicate.IsNotNull() ? lenders.Where(predicate) : lenders; 

    } 
} 

Visual Studio是給了一個錯誤上的「lenders.Where(謂語)」 - 該消息是「......不包含在哪裏定義...」

任何想法我做錯了?

* UPDATE *

這似乎是與謂詞 - 。哪裏是avaialable否則。

+0

在您的文件頂部添加'使用System.Linq;'和'使用System.Linq.Expressions;' – Andomar 2013-04-29 09:37:06

+0

@Andomar - 已經包含 – dotnetnoob 2013-04-29 09:43:04

+0

順便說一句,您應該始終發佈整個異常消息。雖然有時候很長很難閱讀,但它可能已經包含了解決問題的方法。 – sloth 2013-04-29 09:48:58

回答

5

有沒有擴展方法Where延伸IEnumerable<T>並採取Expression<Func<T, bool>>類型的參數。

你有兩個選擇:

  1. 使用一個IQueryable<Lender>,而不是IEnumerable<Lender>(您可以在此方便地通過打電話只是.AsQueryable()),如果你婉保持參數predicateExpression<Func<Lender, bool>>

  2. 使用類型Func<Lender, bool>而不是Expression<Func<Lender, bool>>代表predicate參數。由於您正在從文件加載數據,因此在IEnumerable上使用IQueryable毫無意義。

+0

感謝dominic - 這兩個工作,但我用你提到的原因2。 – dotnetnoob 2013-04-29 09:58:24

0

這是抱怨,無論類型lenders是沒有.Where方法。這可能是因爲:

  • 您還沒有using System.Linq;
  • 類型的lenders不是IEnumerable或相似。
+0

Aleady包含linq命名空間 - 請參閱上文 - 變量貸方是IEnumerable dotnetnoob 2013-04-29 09:45:08

-1

替換:

lenders.Where(predicate) 

有了:

lenders.ToList().Where(predicate) 

兩個應該能夠返回IEnumerable

與此相關的主要問題是查詢將在.ToList()命令上執行。我想這是根據你期望的功能來做的,如果這可以滿足你的需求。