Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Нужен совет по Union  [new]
ughunter
Member

Откуда: Владивосток
Сообщений: 132
Имеется следующее:

if (count == null)
                count = Config.CountOfActuallyInfoString;

            List<IActuallyInfo> list = new List<IActuallyInfo>();
            if (Repository != null)
            {
                List<Article> aList =
                    Repository.Articles.Where(s => s.Status == RecordStatus.Active)
                    .OrderByDescending(d => (d.Published ?? d.CreationDate))
                        .Take(count.Value)
                        .ToList();

                list.AddRange(aList);

/// Этих кусков очень много
                List<News> nList =
                    Repository.News.Where(s => s.Status == RecordStatus.Active)
                    .OrderByDescending(d => d.Published ?? d.CreationDate)
                        .Take(count.Value)
                        .ToList();
                list.AddRange(nList);


понимаю, что это просто ужос... Вот собственно и вопрос: как от этого избавиться?
22 дек 15, 14:22    [18594296]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по Union  [new]
handmadeFromRu
Member

Откуда: родина Ленина!
Сообщений: 1996
ну чуда не будет. если тебе надо из 100500 справочников засунуть в 1 лист примерно так и будет.
ты мож эт сделать через n-запросов к бд а можешь 1 запросом.

тут больше вопрос зачем это все в 1 справочник
22 дек 15, 17:01    [18595449]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по Union  [new]
ughunter
Member

Откуда: Владивосток
Сообщений: 132
handmadeFromRu,

консолидированные данные: к вопросу зачем. вот что пришло на ум
foreach (ModelIds item in Enum.GetValues(typeof(ModelIds)))
                {
                    var type = item.GetAttributeOfType<ModelTypeAttribute>().ModelType;

                    //ParameterExpression parameter = Expression.Parameter(type, "s");
                    //MemberExpression property = Expression.Property(parameter, "Status");
                    //ConstantExpression rightSide = Expression.Constant(RecordStatus.Active);
                    //BinaryExpression operation = Expression.Equal(property, rightSide);
                    //Type delegateType = typeof (Func<,>).MakeGenericType(type, typeof (bool));
                    //LambdaExpression predicate  = Expression.Lambda(delegateType, operation, parameter);

                    dynamic task = Repository.GetType().GetMethod("GetAll").MakeGenericMethod(type).Invoke(Repository, null);
                    IQueryable<IActuallyInfo> ai = task as IQueryable<IActuallyInfo>;
                    ai = ai?.Where(s => s.Status == RecordStatus.Active)
                        .OrderByDescending(d => (d.Published ?? d.CreationDate))
                        .Take(count.Value);

                    if (ai != null)
                    {
                        var l = ai.ToList();
                    }
                }


осталось сделать запрос с union
22 дек 15, 20:54    [18596329]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по Union  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4959
ughunter,
сделай в БД вьюшку.
28 дек 15, 15:54    [18618912]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить