Динамичный LINQ
От: Holms США  
Дата: 30.11.09 03:54
Оценка:
Хочется сделать что-то интересное но пока не получается. Нужны идеи

Код такой
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>>
The life is relative and reversible.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.