сколько операторов поддерживается в библиотеке system.linq.dynamic для динамического linq - PullRequest
1 голос
/ 08 марта 2011

Я использую библиотеку System.Linq.Dynamic для генерации динамического условия, когда в IQueryable коллекции.Может кто-нибудь перечислить список операций, поддерживаемых этой библиотекой?Я знаю только = и содержит.Могу ли я использовать "IN, Like, Not Like и т.д ..."?

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Библиотека используется для создания динамического linq, поэтому я не ожидаю, что она будет поддерживать упомянутые вами sql-операторы. Глядя на код, кажется, что он поддерживает подмножество методов в 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();

Предоставить: Где, Выбрать, OrderBy, OrderByDescending, ThenBy, ThenByDescending, Take, Skip, GroupBy, Any, Count, Min, Max, Concat

Обновление : теперь я нашел документацию , LinqSamples \ DynamicQuery \ Dynamic expression.html, в загрузке. Я думаю, вы найдете то, что вы ищете в разделе операторов. (И вышесказанное можно подтвердить в разделе «Методы расширения IQueryable».)

0 голосов
/ 06 августа 2011

Библиотека System.Linq.Dynamic смотрит на операторы как ==> <> = и т. Д. Она также может выполнять любую функцию, к которой у данного свойства есть доступ.

Вот пример System.Linq.Dynamic для "LIKE"

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», и если вы хотите сказать «НЕ НРАВИТСЯ», просто скажите «! Customer.name.StartsWith (...)»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...