CSharpSamples.zip中動態Linq附帶的幫助文件未顯示使用包含或類似內容的任何示例。如何在動態linq查詢中使用「contains」或「like」?
有沒有簡單的解決方法來做到這一點?即在哪裏(col像@col)不起作用。
CSharpSamples.zip中動態Linq附帶的幫助文件未顯示使用包含或類似內容的任何示例。如何在動態linq查詢中使用「contains」或「like」?
有沒有簡單的解決方法來做到這一點?即在哪裏(col像@col)不起作用。
這是答案!動態Linq確實支持。運營商,
根據文檔:
「實例字段或實例屬性 訪問任何公共字段或屬性 可以訪問。」
因此,可以使用此語法
.Where("MyColumn.Contains(@0)", myArray)
感謝所有的建議!並感謝我尋找解決方案。
其實,有在LINQ2SQL的類似操作直接支持:
db.MyTable.Where(a => SqlMethods.Like(a.Name, "%"+searchTerm+"%"))
在這裏看到:
http://msdn.microsoft.com/en-us/library/system.data.linq.sqlclient.sqlmethods_members.aspx
...但我更喜歡使用startsWith,和的endsWith包含適用於大多數應用
請注意,所提供的解決方案僅適用於簡單情況:如果您想使用Contains調用源的參數和/或如果您想使用當前查詢集合作爲Contains的參數呼叫,那麼提供的解決方案將無法工作。
您可以在以下博客張貼找到一個解決方案,以適當延長動態的LINQ庫並添加支持包含擴展:
對我來說,解決辦法是outerIt。
class User { public string Name { get; set; } }
...
IQueryable<User> query = db.Users;
...
query = query.Where("@0.Contains(outerIt.Name)", list);
注意outerIt是一種建立在圖書館(你不需要修改它,你可以在這裏解答閱讀)一關鍵字。您可以通過它訪問查詢類型的屬性。
請注意大家我正在討論示例文件中的Visual Studio附帶的DYNAMIC LINQ。在這個版本中,我可以使用字符串「mycol = @mycol」來定義where查詢。我知道簡單的情況。 – 2010-03-16 15:38:05
我真的很喜歡做的是在字符串中插入字符串「Like」來代替「=」,並讓Dynamic Linq解析它。但是,我會採取工作。我認爲它沒有添加的原因是他們在沒有這個方法的System.Linq.Expressions上構建了他們的解析器。 – 2010-03-16 15:43:20
要清楚,我能做到這一點 「用戶名= @ 0,Contact.FirstName = @ 1」 但不是這個 「用戶名@一樣0,聯繫。名字像@ 1" 如果這些都是字符串,並且使用動態LINQ語法: dc.table.where(MyString的,陣列) – 2010-03-16 15:57:27