Я провел исследование, но все еще не могу найти решение этой проблемы. У меня есть программа, которая использует лямбда-выражения с linq to sql. Я хотел бы создать экземпляр основного объекта linq как динамический объект и привести его в остальной части программы к различным типам на основе указанного значения. Например:
int Value1 = 'Ob1';
int Value2 = 'OB2';
int Currentval = Value1;
dynamic val;
if (Currentval == Value1;
val = (from c in datacontext.UniqueTable1
select c);
else
val = (from c in datacontext.UniqueTable2
select c);
dynamic val1;
if (Currentval == Value1)
{
val1 = ((IQueryable<datacontex.UniqueTable1>)val).Where(c => c.ID == 2);
}
else if (Currentval == Value1)
{
val1 = ((IQueryable<datacontex.UniqueTable2>val).Where(c => c.ID == 3);
}
Вы не можете делать то, что я предлагаю выше, потому что компилятор жалуется на лямбда-выражение. Кто-нибудь может мне помочь с этим?
Обновление:
Ошибка, которую я получаю при переходе на динамический:
Невозможно использовать лямбда-выражение в качестве аргумента для динамически отправляемой операции без предварительного приведения его к типу дерева делегата или выражения
Update2:
Есть еще одна проблема с этим, у меня есть много логики, которая использует данные, выбранные из выражений lamda, которые происходят выше. Вещи как:
if (val1.Where(c => c.ID == 3).Count() > 0)
{...}
Я хотел бы привести эти значения в зависимости от типа, выбранного из CurrentVal . Поэтому я думаю, что понадобится какое-то отражение. Установка IQueryable аналогична установке dynamic
Так что я думаю, что-то вроде, но я не уверен, что что-то подобное возможно.
if (((IQueryable<CurrentVal>)val1).Where(c => c.ID == 3).Count() > 0)
{...}