Хочется сделать что-то интересное но пока не получается. Нужны идеи
Код такой
public class TypedLookupTable<T> where T : class
{
private IQueryable<T> _linqTable;
private Func<T, int> _pkGetter;
private Func<T, string> _valueGetter;
public TypedLookupTable(IQueryable<T> linqTable, Func<T, int> pkGetter, Func<T, string> valueGetter)
{
_linqTable = linqTable;
_pkGetter = pkGetter;
_valueGetter = valueGetter;
}
public IEnumerable<Tuple<int, string>> Items
{
get
{
foreach (var v in _linqTable.Where(_ => _valueGetter(_) == "").Select(_ => _pkGetter(_)))
{
yield return new Tuple<int, string>(v, "");
}
}
}
}
Использовать так
var ctx = Db.Context;
TypedLookupTable<LUDepartment> deps
= new TypedLookupTable<LUDepartment>(ctx.LUDepartment, _ => _.DepartmentId, _ => _.DepartmentName);
deps.Items.ForEach(_ => Debug.WriteLine(_));
т.е. хочется иметь типизированный класс для простых выборок и для другой общей логики для справочников.
если писать так
foreach (var v in _linqTable..Select(_ => _pkGetter(_)))
код работает и получаю данные.
если же добавить немного логики
foreach (var v in _linqTable.Where(_ => _valueGetter(_) == "").Select(_ => _pkGetter(_)))
то валиться с ошибкой
Method 'System.Object DynamicInvoke(System.Object[])' has no supported translation to SQL.
Вот и возник вопрос как правильно организовать мою задумку.
Спасибо
... << RSDN@Home 1.2.0 alpha 4 rev. 1253>>