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