2010-03-16 89 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是一种建立在图书馆(你不需要修改它,你可以在这里解答阅读)一关键字。您可以通过它访问查询类型的属性。