Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LinQ выборка / 25 сообщений из 27, страница 1 из 2
27.10.2011, 12:47
    #37500518
Che0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Как мне выбрать из списка не все поля, а только определенные?
так он выбирает все:
Код: plaintext
1.
2.
var ScenarioQuery =
                from scenario in ges.D_Scenario
                select scenario;

так только одно поле:
Код: plaintext
1.
2.
var ScenarioQuery =
                from scenario in ges.D_Scenario
                select scenario.Name;

а как выбрать несколько полей и при этом что бы резултат остался списком обьектов?
...
Рейтинг: 0 / 0
27.10.2011, 13:06
    #37500552
Pahan1978
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
select new { scenario.Name, scenario.Name2, ..};
...
Рейтинг: 0 / 0
27.10.2011, 13:19
    #37500566
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Result
{
    public int ID;
    public string Name;
}

var ScenarioQuery =
                from scenario in ges.D_Scenario
                select new Result { ID = scenario.ID, Name =  scenario.Name };
...
Рейтинг: 0 / 0
27.10.2011, 13:29
    #37500591
Che0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
ага, это хорошо, но тогда переопределяется ToString. Поясню что мне надо: полученный список я передаю в combobox
Код: plaintext
combobox.Items.AddRange(xfilter.ListValues.ToArray()); 
и мой ToString показывал Только имя при отображении в combobox. а теперь он естественно выводит все инфу по классу. как быть?
...
Рейтинг: 0 / 0
27.10.2011, 13:38
    #37500609
Che0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
упс, не заметил последнего сообщения. спасибо за помощь
...
Рейтинг: 0 / 0
27.10.2011, 14:49
    #37500774
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Алексей К
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Result
{
    public int ID;
    public string Name;
}

var ScenarioQuery =
                from scenario in ges.D_Scenario
                select new Result { ID = scenario.ID, Name =  scenario.Name };

Гавнокод :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
public static List<T> ToNonAnonymousList<T>(this IQueryable list) where T: new()
{
    var result = Activator.CreateInstance(typeof(List<>).MakeGenericType(typeof(T))) as List<T>;
    foreach (object item in list)
    {
        result.Add(DataMapper.Map<T>(item));
    }
    return result;
}

Код: plaintext
var results = ctx.Types.Select(d => new { Id = d.Id }).ToNonAnonymousList<Result>();
...
Рейтинг: 0 / 0
28.10.2011, 11:10
    #37502162
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
МСУ

ПРОГРАММИСТ, ПОМНИ!
Не стой под стрелой Обилие позднего связывания в проекте может привести к психологической травме!
...
Рейтинг: 0 / 0
28.10.2011, 11:42
    #37502234
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
...
Рейтинг: 0 / 0
28.10.2011, 11:46
    #37502246
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Приведенный ToNonAnonymousList дает программисту чудесную возможность не плодить классы-прокладки , а использовать родной кодогенеренный класс.
Ну, кроме случаев, когда нужно смапливаться в один класс из различных сущностей. Тут так или иначе нужно просю писать.
Так что лучше постоять под стрелой, Лёша. Что скажете? ;)
...
Рейтинг: 0 / 0
28.10.2011, 11:49
    #37502255
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Ну не красота ли?

Код: plaintext
1.
2.
3.
4.
5.
var list = ctx.Customers.Where(d => d.CustomerId == id).Select(d => new
{
    d.FullName,
    d.Desc,
})
.ToNonAnonymousList<Customer>();
...
Рейтинг: 0 / 0
28.10.2011, 12:32
    #37502358
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
МСУПриведенный ToNonAnonymousList дает программисту чудесную возможность не плодить классы-прокладки , а использовать родной кодогенеренный класс.
Ну, кроме случаев, когда нужно смапливаться в один класс из различных сущностей. Тут так или иначе нужно просю писать.
Так что лучше постоять под стрелой, Лёша. Что скажете? ;)Анонимный класс доступен в пределах метода. В Вашем примере всё происходит в пределах метода, поэтому зачем это всё?

Если результаты запроса выходят за границы метода - тогда да, варианта два. Или плодить классы, или позднее связывание. Плодить классы - мне кажется более эффективный способ.

Вместо всякой лабуды лучше бы в C# 5 добавили возможность описания класса по возвращаемому методом типу. Что-то вроде:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class Class1
{
    public IQueryable<GetDataQueryResult> GetDataQuery<public class GetDataQueryResult>()
    {
        return from a in ... select new { X = a.X, Y = a.Y };
    }
}

public class Class2
{
    public void Do()
    {        
        GetDataQueryResult d = new Class1().GetDataQuery().First();
        int x = d.X;
        int y = d.Y;
    }
}

Может я где-то чего-то не учёл. Но хочется чего-то такого...
...
Рейтинг: 0 / 0
28.10.2011, 12:59
    #37502444
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Алексей КАнонимный класс доступен в пределах метода. В Вашем примере всё происходит в пределах метода, поэтому зачем это всё?
А слабо смаппиться с родной кодогенеренный класс в пределах метода, чтобы отдать его честно по ретурну?
Алексей КМожет я где-то чего-то не учёл. Но хочется чего-то такого...
Не учли. И я хочу, чтобы Вы сами до этого дошли :)
...
Рейтинг: 0 / 0
28.10.2011, 13:09
    #37502465
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
МСУАлексей КАнонимный класс доступен в пределах метода. В Вашем примере всё происходит в пределах метода, поэтому зачем это всё?
А слабо смаппиться с родной кодогенеренный класс в пределах метода, чтобы отдать его честно по ретурну?А зачем его генерить? Создавать сразу что возвращаем?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var list = ctx.Customers.Where(d => d.CustomerId == id).Select(d => new
{
    d.FullName,
    d.Desc,
})
.ToNonAnonymousList<Customer>();

VS

var list = ctx.Customers.Where(d => d.CustomerId == id).Select(d => new Customer
{
    d.FullName,
    d.Desc,
}).ToList();

МСУАлексей КМожет я где-то чего-то не учёл. Но хочется чего-то такого...
Не учли. И я хочу, чтобы Вы сами до этого дошли :)Не могу. Помогите. Не вижу причин этого не делать, кроме лени или экономического эффекта для разработчика.

Возможно добавить какие-то ограничения для таких методов на количество return в методе, может ещё чего... Генерация анонимных классов есть, механизмы вывода типов есть. Остался один шаг...
...
Рейтинг: 0 / 0
28.10.2011, 13:17
    #37502486
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
[quot Алексей К]А зачем его генерить? Создавать сразу что возвращаем?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var list = ctx.Customers.Where(d => d.CustomerId == id).Select(d => new
{
    d.FullName,
    d.Desc,
})
.ToNonAnonymousList<Customer>();

VS

var list = ctx.Customers.Where(d => d.CustomerId == id).Select(d => new Customer
{
    d.FullName,
    d.Desc,
}).ToList();

МСУпропущено...

А проверить?
...
Рейтинг: 0 / 0
28.10.2011, 13:18
    #37502487
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Алексей КА зачем его генерить? Создавать сразу что возвращаем?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var list = ctx.Customers.Where(d => d.CustomerId == id).Select(d => new
{
    d.FullName,
    d.Desc,
})
.ToNonAnonymousList<Customer>();

VS

var list = ctx.Customers.Where(d => d.CustomerId == id).Select(d => new Customer
{
    d.FullName,
    d.Desc,
}).ToList();


А проверить?
...
Рейтинг: 0 / 0
28.10.2011, 13:32
    #37502515
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
МСУА проверить?
Ну опечатка. Сути не меняет...
...
Рейтинг: 0 / 0
28.10.2011, 13:38
    #37502532
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Алексей КМСУА проверить?
Ну опечатка. Сути не меняет...
Какая опечатка? Я говорю - проверьте Ваша "решение". Оно не работает )
...
Рейтинг: 0 / 0
28.10.2011, 13:46
    #37502559
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
МСУАлексей Кпропущено...

Ну опечатка. Сути не меняет...
Какая опечатка? Я говорю - проверьте Ваша "решение". Оно не работает )Ну как так не работает!? Ну хорошо. Приведите пример работающего решения без позднего связывания с аналогичным функционалом. Возможно я не понимаю задачу.

ЗЫ: И поподробнее про новые возможности в C# пожалуйста. Этот вопрос очень важен. Надо выработать предложение и отписать Андрюхе Хейльсбергу в блог.
...
Рейтинг: 0 / 0
28.10.2011, 14:50
    #37502766
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Алексей КНу как так не работает!?
Еще раз. Отбросьте сомнения, возьмите руки, табличку, линк и проведите эксперимент . Договорились? )
...
Рейтинг: 0 / 0
31.10.2011, 20:40
    #37505925
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Ну что, Лёня, рассказывайте.
...
Рейтинг: 0 / 0
01.11.2011, 05:50
    #37506157
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
МСУНу что, Лёня, рассказывайте.Вы бы поправили ошибки в моём примере, чтобы я понял что не так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
var list = ctx.Customers
    .Where(d => d.CustomerId == id)
    .Select(d => new CustomerView
    {
        FullName = d.FullName,
        Desc =  d.Desc
    })
    .ToList(); 
Не?

Ну и результат само собой выходит из метода. Иначе CustomerView наверное можно было бы не описывать.
...
Рейтинг: 0 / 0
01.11.2011, 09:38
    #37506232
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Алексей КМСУНу что, Лёня, рассказывайте.Вы бы поправили ошибки в моём примере, чтобы я понял что не так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
var list = ctx.Customers
    .Where(d => d.CustomerId == id)
    .Select(d => new CustomerView
    {
        FullName = d.FullName,
        Desc =  d.Desc
    })
    .ToList(); 
Не?


Мой новосибский друже, ну зачем же Вы так злостно меня нае..те? :)
Этот код будет чудесно отрабатывать. Но тут использована левая педаль прокся. А я предложил вмапливаться в ту же автогенеренную сущность Customer через рефлексию. Вы сказали - гавно вопрос, можно тупо написать:
Код: plaintext
1.
2.
3.
4.
Select(d => new Customer
    {
        FullName = d.FullName,
        Desc =  d.Desc
    })
и всё будет работать без левых движений. Я рекомендовал Вам проверить свои домыслы. И вот битый день Вы продолжаете ипсти мой уставший моск. Доколе, Лёша? )

Еще раз. Я жду от Вас код (на линке или на еф) инициализации родной сущности (без доп. прокладки).
...
Рейтинг: 0 / 0
01.11.2011, 09:55
    #37506241
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
МСУА я предложил вмапливаться в ту же автогенеренную сущность Customer через рефлексию.Ну дык... Теперь понятно. Мысли читать не умею, так что извиняйте. :-)

Только практической пользы от "отдавать не полностью заполненную сущность наружу" я не вижу. Ну сэкономили немного на создании класса. Согласен. Но только от этого мне видится больше вреда чем пользы.
...
Рейтинг: 0 / 0
01.11.2011, 10:57
    #37506341
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
Алексей КНу сэкономили немного на создании класса. Согласен.
Ну наконец-то, Вы ж моё счастье. Да и не немного сэкономили, а много сэкономили. Полно и с горкой в повседневности мы встречаем задачи, где нужно вытащить кусок сущности (сущностей) без высасывания всех полей. Для задач с объединением сущностей - да, через прокладку, по-другому нельзя.
Алексей КНо только от этого мне видится больше вреда чем пользы.
Не вижу никакого вреда. В чем вред-то?
...
Рейтинг: 0 / 0
01.11.2011, 11:50
    #37506471
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LinQ выборка
МСУАлексей КНу сэкономили немного на создании класса. Согласен.
Ну наконец-то, Вы ж моё счастье. Да и не немного сэкономили, а много сэкономили. Полно и с горкой в повседневности мы встречаем задачи, где нужно вытащить кусок сущности (сущностей) без высасывания всех полей.А не надо ничего никуда тащить. Описываем каждую предметную область в виде свойства (нескольких свойств) в глубинах модели, типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public IQueryable<PersonalCore> PersonalCore // Таких классов будет не много, скорее один на предметную область
{
    get 
    {
        using(var s = DbContextFactory.Scope) // ThreadStatic-кэш контекстов
            return 
                from p in s.Content.Personal
                select new PersonalCore
                {
                    Base = p,
                    Name = p.FirstName + " " + p.LastName,
                    // и ещё 48 полей.
                };
    }
}

// Классов типа PersonalView возможно будет много. Но это уже презентация, тут ничего не поделаеш...
[OperationContract] // даже пусть уйдёт через WCF :-)
public PersonalView GetPersonalViewByID(int id)
{
    using(var s = DbContextFactory.Scope) 
        return PersonalCore
            .Where(v => v.Base.ID == id)
            .Select(new PersonalView { ID = p.Base.ID, Name = p.Name }) // берём то что надо.
            .First();
}

МСУАлексей КНо только от этого мне видится больше вреда чем пользы.
Не вижу никакого вреда. В чем вред-то?Можно понадеяться на то что там что-то есть, а там пусто. :-)
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LinQ выборка / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]