2013-03-25 119 views
1

誰能幫我這個:動態LINQ

我有一個動態(ExpandoObject)財產POCO對象的集合,需要加以串條件的一部分在動態LINQ

前。

​​

動態特性(ExpandoObject)有一個屬性(IdName

如何才能篩選使用動態LINQ的測試對象的集合,(應該怎麼樣子字符串,其中條件?):

IList<Test> testList; 

testList.AsQueryable() 
     .Where("DynamicProperty.Id == 2 or DynamicProperty.Name == "test"") 
+0

字符串過濾器轉換的ExpandoObject到詞典您LINQ,然後鏈子的字典另一個過濾器。 – zsong 2013-03-25 15:32:55

回答

0

Dynamic LINQ提供了一個小型可重用的庫,它支持字符串謂詞(和查詢語言)來構建動態LINQ語句。

Download Link

+0

動態Linq庫在上述示例中屬性聲明爲動態的示例中不起作用。 – 2016-12-30 16:37:55

0

鏈上相同的IQueryable的何在構建然後可以用ToList實現一個完整的表達式樹:

IList<string> testList = new List<string>() {"One", "Two", "Three", "Four", "Five"}; 

var filteredList = testList.AsQueryable().Where((s) => s.Length <= 4); 
filteredList = filteredList.Where((s) => s[0].Equals('F')); 

var results = filteredList.ToList(); 
+0

thanax球員,但我的where條件必須是一個字符串,它將在動態where子句中使用,就像我發佈的示例中 – user596107 2013-03-25 21:12:08

0

感謝名單的傢伙,但我在那裏的條件必須是一個字符串,將在動態where子句中使用,就像我發佈的示例一樣。複雜屬性(DynamicProperty)是未知類型,必須在過濾器中使用,如示例中所示。我使用了ExpandoObject,但在語法(.Where("DynamicProperty.Id == 2 or DynamicProperty.Name == "test""))上遇到問題。由於該字符串結構必須如此.Where("DynamicProperty["Id"] == 2 or DynamicProperty["Name"] == "test"")),因爲Expando具有IDictionary<string, object>結構所有值必須顯式轉換和最終過濾器是:.Where(Convert.ToInt32("DynamicProperty["Id"]) == 2 or DynamicProperty["Name"].ToString() == "test""))這是一個比第一個更復雜。

如何解決問題,有一個像上面的例子

"DynamicProperty.Id == 2 or DynamicProperty.Name == "test""