Func<Interface, bool> возможно ли?
От: Аноним  
Дата: 31.03.11 11:13
Оценка:
Добрый день.
Данные могут получаться из различных источников (excel, xml, СУБД и т.д).
Наружу из модуля видны POCO классы и методы для выборки данных. Есть internal Entity классы для работы с СУБД.
POCO и Entity класс имееют одинаквые поля и типы данных.
Метод выглядит так

public IList<User> GetUsers(Func<User, bool> func)
{
    using(var entities = new Entities(_connectionString))
    {
        entities.ContextOptions.LazyLoadingEnabled = false;                    
        return entities.Users.Where(func).ToList();
    }        
}

Func<User, bool> в виде параметра принимает POCO классы, а entities.Users entity классы.
Вопрос как можно в Func передать Entity класс, если наружу из модуля он не виден?
Или вообще любые советы как решить доступ к различным источникам данныч в одном модуле, что бы для клиента наружу были только POCO классы.
Re: Func<Interface, bool> возможно ли?
От: alexkh  
Дата: 31.03.11 12:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день.

А>Данные могут получаться из различных источников (excel, xml, СУБД и т.д).
А>Наружу из модуля видны POCO классы и методы для выборки данных. Есть internal Entity классы для работы с СУБД.
А>POCO и Entity класс имееют одинаквые поля и типы данных.
А>Метод выглядит так

А>
А>public IList<User> GetUsers(Func<User, bool> func)
А>{
А>    using(var entities = new Entities(_connectionString))
А>    {
А>        entities.ContextOptions.LazyLoadingEnabled = false;                    
А>        return entities.Users.Where(func).ToList();
А>    }        
А>}
А>

А>Func<User, bool> в виде параметра принимает POCO классы, а entities.Users entity классы.
А>Вопрос как можно в Func передать Entity класс, если наружу из модуля он не виден?

Правильно ли я понял что этот метод должен вернуть POCO User а не Entity User?

А>Или вообще любые советы как решить доступ к различным источникам данныч в одном модуле, что бы для клиента наружу были только POCO классы.


Можно подумать о том чтобы смапить на источник сами POCO классы, тогда не будет такой путаницы. Только нужно будет дописать Query-провайдер + пользовать кастомный маппинг.
В одном из проектов сделали такое для LinqToSql.
Re: Func<Interface, bool> возможно ли?
От: Angler Россия  
Дата: 31.03.11 12:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Или вообще любые советы как решить доступ к различным источникам данныч в одном модуле, что бы для клиента наружу были только POCO классы.


1) вначале создать POCO объект, а потом только фильтровать:

public IList<User> GetUsers(Func<User, bool> func)
{
   using(var entities = new Entities(_connectionString))
   {
      entities.ContextOptions.LazyLoadingEnabled = false;                    
      return entities.Users
        .Select(u => new POCO.User(u))
        .Where(func)
        .ToList(); 
   }        
}


2) Func<dynamic, bool> — но конвертировать Entity->POCO прийдется всё равно
Re[2]: Func<Interface, bool> возможно ли?
От: alexkh  
Дата: 31.03.11 12:42
Оценка:
Здравствуйте, Angler, Вы писали:

A> .Select(u => new POCO.User(u))

A> .Where(func)


Этот Expression в SQL не транслируется. Каждый запрос будет тягать всех юзеров вне зависимости от фильтра.
Re: Func<Interface, bool> возможно ли?
От: HowardLovekraft  
Дата: 31.03.11 12:51
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>skipped

EF 4 прекрасно работает с POCO в качестве entity-классов.
Re[2]: Func<Interface, bool> возможно ли?
От: Аноним  
Дата: 31.03.11 16:34
Оценка:
Здравствуйте, alexkh, Вы писали:

A>Правильно ли я понял что этот метод должен вернуть POCO User а не Entity User?

Да

А>>Или вообще любые советы как решить доступ к различным источникам данныч в одном модуле, что бы для клиента наружу были только POCO классы.


A>Можно подумать о том чтобы смапить на источник сами POCO классы, тогда не будет такой путаницы. Только нужно будет дописать Query-провайдер + пользовать кастомный маппинг.

A>В одном из проектов сделали такое для LinqToSql.
Спасибо. Буду гуглить
Re[2]: Func<Interface, bool> возможно ли?
От: Аноним  
Дата: 31.03.11 17:59
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, Аноним, Вы писали:


А>>skipped

HL>EF 4 прекрасно работает с POCO в качестве entity-классов.
Спасибо. Буду читать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.