2014-01-28 6 views
0

Я пытаюсь понять, как использовать любой оператор Linq.Dynamic, вот мой тестовый код:Динамические Linq Любой синтаксис

var bar = new[] { 
    new {Bar = "A", Id = 1}, 
    new {Bar = "B", Id = 1}, 
    new {Bar = "C", Id = 2}, 
    new {Bar = "A", Id = 2}, 
    new {Bar = "B", Id = 3}, 
    new {Bar = "C", Id = 3} 
}; 
var foo = new[] { 
    new {Foo = 1, Id = 1}, 
    new {Foo = 1, Id = 1}, 
    new {Foo = 2, Id = 2}, 
    new {Foo = 2, Id = 2}, 
    new {Foo = 2, Id = 3}, 
    new {Foo = 3, Id = 3} 
}; 
var res = foo.GroupJoin(bar, x => x.Id, y => y.Id, (x, l) => new { F = x.Foo, Bs = l.Select(b => b.Bar).ToArray() }).ToArray(); 
var normalLinq = res.Where(x => x.Bs.Any(y => y == "A")).ToArray(); 
var dynamicLinq = res.AsQueryable().Where("Bs.Any(x => x==\"A\")").ToArray(); //won't work 

Синтаксис "Bs.Any(x => x==\"A\")" неправильно как динамические LINQ, кажется, не знают, выражение lambda, которое я вставляю, и исключение выбрано. Как мне заставить работать?

Моя цель - проанализировать динамический поиск с помощью этого кода. Если у вас у Linq есть другие способы улучшить динамический поиск, пожалуйста, предложите?

ответ

2

Если вы используете эту библиотеку: http://www.nuget.org/packages/System.Linq.Dynamic/ насколько я знаю, это не позволяет лямбда-выражения. Однако есть кто-то, кто расширил эту библиотеку. Я никогда не пробовал, но выглядит многообещающе. http://dynamiclinq.codeplex.com/ Удачи :)

+0

спасибо, и, кстати, я понял, что мне нужно реализовать функцию Contains(), чтобы делать то, что я хотел. – Tom

Смежные вопросы