2011-10-14 129 views
1

對不起,我的英語不好。我有個問題。我想在LINQ查詢中創建動態where子句。我有一個列表對象名稱「list1」,其值爲Country,City,State和一個數據表,其列名爲NameLastname, Country, City, State。我想比較list1值與數據表列,並獲得空/空行。linq查詢中的動態where子句

所以我想LINQ查詢是這樣的:

var query = from p in datatable.AsEnumerable() 
      where list1 == null 
      select p 

但它返回一個錯誤。我怎麼解決這個問題?

在此先感謝。

+0

你得到了什麼樣的錯誤? – svick

+0

所以,你有一個對象列表,這個對象具有國家,城市和州的屬性。你想從數據庫中的表中找到所有不匹配對象列表中至少一個值的記錄? –

+0

是至少有一個值匹配 –

回答

1

好吧,讓我們開始吧 - 您的查詢是非常糟糕的。

  • 您不應該有datatable.AsEnumerable - 強制執行表掃描(貫穿整個表)。
  • 其次,您必須以表達方式編碼所有字段。這將變得討厭 - 每個定義根據列表的大小,這將是非常糟糕的。

一般情況下,每個查詢是IQueryable本身,所以你可以鏈,其中conditions.VERY不錯 - 我用自己部分,定義核心查詢,然後添加額外的where子句像以前那樣需要(通過輸入參數)執行。

不幸的是,通過單個字段匹配將表與元素列表進行比較與從sql級別獲取一樣糟糕。