2010-03-16 92 views
30

CSharpSamples.zip中動態Linq附帶的幫助文件未顯示使用包含或類似內容的任何示例。如何在動態linq查詢中使用「contains」或「like」?

有沒有簡單的解決方法來做到這一點?即在哪裏(col像@col)不起作用。

+0

請注意大家我正在討論示例文件中的Visual Studio附帶的DYNAMIC LINQ。在這個版本中,我可以使用字符串「mycol = @mycol」來定義where查詢。我知道簡單的情況。 – 2010-03-16 15:38:05

+0

我真的很喜歡做的是在字符串中插入字符串「Like」來代替「=」,並讓Dynamic Linq解析它。但是,我會採取工作。我認爲它沒有添加的原因是他們在沒有這個方法的System.Linq.Expressions上構建了他們的解析器。 – 2010-03-16 15:43:20

+0

要清楚,我能做到這一點 「用戶名= @ 0,Contact.FirstName = @ 1」 但不是這個 「用戶名@一樣0,聯繫。名字像@ 1" 如果這些都是字符串,並且使用動態LINQ語法: dc.table.where(MyString的,陣列) – 2010-03-16 15:57:27

回答

56

這是答案!動態Linq確實支持。運營商,

根據文檔:

「實例字段或實例屬性 訪問任何公共字段或屬性 可以訪問。」

因此,可以使用此語法

.Where("MyColumn.Contains(@0)", myArray) 

感謝所有的建議!並感謝我尋找解決方案。

+1

我怎樣才能做到這一點對一個空列 – Thea 2012-07-09 13:34:34

+8

@Teddy 。哪裏(?「MyColumn != null && MyColumn.Contains(@ 0)「,myArray) – 2013-10-14 11:51:43

+0

如何將Grid FilterExpression轉換爲此語法?有一些NuGet動態LINQ庫,包括.NET 4.0支持...我們是否知道是否已經添加了從LIKE到Contains(或其他)的轉換支持? – PeterX 2015-03-04 00:41:07

4

對我來說,解決辦法是outerIt

class User { public string Name { get; set; } } 
    ... 
    IQueryable<User> query = db.Users; 
    ... 
    query = query.Where("@0.Contains(outerIt.Name)", list); 

注意outerIt是一種建立在圖書館(你不需要修改它,你可以在這裏解答閱讀)一關鍵字。您可以通過它訪問查詢類型的屬性。