Это мой сценарий: мне нужно извлечь данные из сущности, используя запрос «ИЛИ» для свойства в связанном объекте.Выполнить выражение linq tree в
Это мои объекты:
public class Dealer
{
public virtual int id{get;set;}
public virtual string name{get;set;}
public virtual IList<Car> Cars{get;set;}
}
public class Car
{
public virtual int id{get;set;}
public virtual string name{get;set;}
public virtual int kw{get;set;}
}
Пример: Я хочу, чтобы извлечь все дилеры, которые имеют автомобили с 98кВт или 100кВт. Sql Пример:
SELECT Dealers.* FROM Dealers INNER JOIN Cars ON Cars.IdDealer = Dealers.Id WHERE Cars.kw = 98 OR Cars.kw = 100
Я пытался использовать деревья выражений, но я не знаю, как их использовать. Я попытался это:
var dealers = Session.Linq<Dealers>();
ParameterExpression pe = Expression.Parameter(typeof(int), "kw");
Expression tot = null;
var powers = new int[2]{98, 100};
for (var i = 0; i < powers.Length; i++)
{
Expression right = Expression.Constant(int.Parse(powers[i]));
if (i > 0)
tot = Expression.Or(tot, Expression.Equal(pe, right));
else
tot = Expression.Equal(pe, right);
}
dealers = dealers.Where(x => x.Cars.Any(Expression.Lambda<Func<Cars, bool>>(tot, null)));
но я получаю эти ошибки компилятора на последней строке, где я пытаюсь выполнить выражение:
- Невозможно преобразовать лямбда-выражения к типу
string
, потому что это не тип делегата System.Collections.Generic.IList<Cars>
не содержит определения дляAny
и лучший метод расширения перегрузки System.Linq.Enumerable.Any (System.Collections.Generic.IEnumerable, System.Func) имеет некоторые недопустимые аргументы- Аргумент 2: не может конвертировать из
System.Linq.Expressions.Expression<System.Func<Cars,bool>>
вSystem.Func<Cars,bool>
Любые предложения?
Что такое «ошибка компилятора»? –
Могу ли я сделать небольшое предложение, которое может приветствовать или не приветствовать. на мой взгляд, вам следует избегать использования RAW-выражений таким образом в открытой среде. я бы сердечно предложил, чтобы вы приняли более закрытый подход и посмотрели на нечто вроде предикат-строителя альбахари: http://www.albahari.com/nutshell/predicatebuilder.aspx сэкономит вам массу разочарований. некоторые большие рабочие примеры на странице тоже –
@KonradMorawski добавил список ошибок – Albirex