2017-04-10 59 views
0

如何在動態linq表達式字符串中定義一個數組,我可以傳入.Where(string)? 我已經試過{ "val a", "val b", "val c" },但這不起作用。在動態linq表達式中定義數組

這裏是什麼,我想實現一個例子:

public class Person 
{ 
    String Name { get; set; } 
    int Age { get; set; } 
} 

現在我想用一個完全動態創建動態的LINQ表達式字符串來查詢IQueryable<Person>,其中例如根據預定義值列表查詢Name。下面的作品,但很麻煩的時候也有很多價值:

myQueryablePersons.Where("Name == \"John Doe\" || Name == \"Mr Smith\" || Name == \"CatWoman\"); 

我希望做的是這樣的:

myQueryablePersons.Where("{ \"John Doe\", \"Mr Smith\", \"CatWoman\" }.Contains(Name)"); 

我知道如何可以使用普通的C#實現或簡單的Linq,但我想通過僅使用傳入Where()的字符串來完成。這可能嗎?我已經在Stackoverflow和其他網站上搜索了其他答案,但找不到真正適合我的具體問題的答案。

+1

請澄清你的具體問題或添加額外的細節,以確切地突出你需要什麼。正如目前所寫,很難確切地說出你在問什麼。請參閱如何問問頁面以獲取幫助以澄清此問題。 –

+2

分享你的代碼,指定你的問題。給出例如「這是輸入,這是輸出,但這是預期的輸出」。 – Berkay

+1

然後告訴我們*你正在使用哪個動態linq(有兩個或三個不同的實現) – xanatos

回答

0

我不認爲動態LINQ支持「內聯」數組的創建。你可以做的是通過它作爲一個參數:

var persons = new[] 
{ 
    new Person { Name = "John Doe" } 
}; 

var names = new[] { "John Doe", "Mr Smith" }; 
var res = persons.AsQueryable().Where("@0.Contains(Name)", names).ToArray(); 
+0

謝謝,但這是我不能做我的用例,因爲查詢必須是完全動態的,不幸的是。 .. – Slayer

+0

@Slayer有沒有這個運氣? –