有多少运营商支持system.linq.dynamic库中的动态linq

时间:2011-03-08 09:33:51

标签: c# linq-to-sql

我使用System.Linq.Dynamic库在IQueryable集合上生成动态where条件。任何人都可以列出此库支持的操作列表吗?我只知道=和包含。我可以使用“INLikeNot Like等......”?

2 个答案:

答案 0 :(得分:1)

该库用于创建动态linq,所以我不希望它支持你提到的sql-operators。查看代码,它似乎支持System.Linq.Enumerable中的方法的一部分。

var code = File.ReadAllText("dynamic.cs");
var strings = Regex.Matches(code, "\"(\\w*)\"").Cast<Match>()
    .Select(m => m.Groups[1].Value);
var methods = typeof(System.Linq.Enumerable).GetMethods(BindingFlags.Public 
    | BindingFlags.Static).Select(mi => mi.Name);

string.Join(", ", strings.Intersect(methods)).Dump();

Give:Where,Select,OrderBy,OrderByDescending,ThenBy,ThenByDescending,Take,Skip,GroupBy,Any,Count,Min,Max,Concat

更新:我现在在下载中找到了文档,LinqSamples \ DynamicQuery \ Dynamic expression.html。我想你会在运营商部分找到你想要的东西。 (以上内容可以在IQueryable Extension Methods部分确认。)

答案 1 :(得分:0)

System.Linq.Dynamic库查看类似==&gt;的运算符。 &LT; &gt; =等。它还可以执行给定属性可以访问的任何函数。

这是“LIKE”的System.Linq.Dynamic示例

myQueryable.Where( 
    "customer.name.StartsWith(@0) AND customer.lastName.EndsWith(@1)","B","E");

这相当于:

"select .... from .... WHERE customer.name LIKE 'B%' AND customer.name LIKE '%E'"

在此示例中,库可以调用System.String可以访问的任何函数。在一个侧节点上,它已经使用了它们的关键字“IN”,如果你想说“NOT LIKE”,只需说“!customer.name.StartsWith(...)”

相关问题