powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LinQ выборка
25 сообщений из 27, страница 1 из 2
LinQ выборка
    #37500518
Che0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как мне выбрать из списка не все поля, а только определенные?
так он выбирает все:
Код: 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
LinQ выборка
    #37500552
Pahan1978
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select new { scenario.Name, scenario.Name2, ..};
...
Рейтинг: 0 / 0
LinQ выборка
    #37500566
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
LinQ выборка
    #37500591
Che0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, это хорошо, но тогда переопределяется ToString. Поясню что мне надо: полученный список я передаю в combobox
Код: plaintext
combobox.Items.AddRange(xfilter.ListValues.ToArray()); 
и мой ToString показывал Только имя при отображении в combobox. а теперь он естественно выводит все инфу по классу. как быть?
...
Рейтинг: 0 / 0
LinQ выборка
    #37500609
Che0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс, не заметил последнего сообщения. спасибо за помощь
...
Рейтинг: 0 / 0
LinQ выборка
    #37500774
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К
Код: 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
LinQ выборка
    #37502162
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ

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

Код: 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
LinQ выборка
    #37502358
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУПриведенный 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
LinQ выборка
    #37502444
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КАнонимный класс доступен в пределах метода. В Вашем примере всё происходит в пределах метода, поэтому зачем это всё?
А слабо смаппиться с родной кодогенеренный класс в пределах метода, чтобы отдать его честно по ретурну?
Алексей КМожет я где-то чего-то не учёл. Но хочется чего-то такого...
Не учли. И я хочу, чтобы Вы сами до этого дошли :)
...
Рейтинг: 0 / 0
LinQ выборка
    #37502465
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КАнонимный класс доступен в пределах метода. В Вашем примере всё происходит в пределах метода, поэтому зачем это всё?
А слабо смаппиться с родной кодогенеренный класс в пределах метода, чтобы отдать его честно по ретурну?А зачем его генерить? Создавать сразу что возвращаем?

Код: 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
LinQ выборка
    #37502486
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[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
LinQ выборка
    #37502487
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КА зачем его генерить? Создавать сразу что возвращаем?

Код: 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
LinQ выборка
    #37502515
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУА проверить?
Ну опечатка. Сути не меняет...
...
Рейтинг: 0 / 0
LinQ выборка
    #37502532
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУА проверить?
Ну опечатка. Сути не меняет...
Какая опечатка? Я говорю - проверьте Ваша "решение". Оно не работает )
...
Рейтинг: 0 / 0
LinQ выборка
    #37502559
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...

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

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

Код: 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
LinQ выборка
    #37506232
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУНу что, Лёня, рассказывайте.Вы бы поправили ошибки в моём примере, чтобы я понял что не так.

Код: 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
LinQ выборка
    #37506241
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУА я предложил вмапливаться в ту же автогенеренную сущность Customer через рефлексию.Ну дык... Теперь понятно. Мысли читать не умею, так что извиняйте. :-)

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

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


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