kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 alchemical
alchemical
Вопрос

Как вернуть анонимный тип из метода c#, использующего LINQ to SQL

Возможный дубликат: LINQ to SQL: Возврат анонимного типа?

У меня есть стандартный запрос LINQ to SQL, который возвращает данные в виде анонимного типа (содержащего около 6 столбцов данных различных типов).

Я хотел бы сделать этот возвращаемый объект доступным для других частей программы, либо вернув его вызывающему методу, либо присвоив его свойству объекта, содержащего метод.

Как я могу это сделать, учитывая, что это анонимный тип ("var")?

EDIT - Вот код:

    using (ormDataContext context = new ormDataContext(connStr))
    {
        var electionInfo = from t1 in context.elections
                   join t2 in context.election_status
                   on t1.statusID equals t2.statusID
                   select new { t1, t2 };
    }
44 2009-07-01T18:03:52+00:00 6
 Community
Community
Редактировал вопрос 23-го мая 2017 в 11:54
Программирование
linq-to-sql
linq
c#
anonymous-types
Решение / Ответ
Анонимный пользователь
1-го июля 2009 в 6:07
2009-07-01T18:07:42+00:00
Дополнительно
Источник
Редактировать
#9219648

Превратите анонимный тип в класс...

public class Person
{
    public Person() {
    }

    public String Name { get; set; }
    public DateTime DOB { get; set; }
}

Person p = 
    from person in db.People 
    where person.Id = 1 
    select new Person { 
        Name = person.Name,
        DOB = person.DateOfBirth
    }
65
0
 JaredPar
JaredPar
1-го июля 2009 в 6:10
2009-07-01T18:10:09+00:00
Дополнительно
Источник
Редактировать
#9219649

Ни один метод в C# не может быть явным типом анонимных типов. Они не могут быть "названы", так сказать, и, следовательно, не могут появляться в подписях метаданных.

Если вы действительно хотите вернуть значение, которое является анонимным типом, есть 2 варианта

  1. Пусть возвращаемый тип метода будет System.Object. Затем вы можете сделать злобный кастинг, чтобы получить типизированное значение в другом методе. Это очень хрупко, и я не рекомендую этого делать.
  2. Использовать общий метод и трюк с выводом типа, чтобы получить правильный возвращаемый тип. Это потребует очень интересного определения сигнатуры для вашего подхода.

Анонимные типы не предназначены для передачи таким образом. На том этапе, когда вам нужно передавать их между функциями таким образом, лучше явно определить тип.

19
0
 tvanfosson
tvanfosson
1-го июля 2009 в 6:19
2009-07-01T18:19:29+00:00
Дополнительно
Источник
Редактировать
#9219651

Используя ВАР не'т сделать это анонимный тип. Используя ВАР просто означает, пусть эта переменная будет типа доступны на правой стороне задания. Это's просто руки коротки. Если вещь на правую руку-это настоящий класс, переменная этого типа.

Например:

var person = new Person { Name = "bob" };

Человеку переменная имеет тип человек, даже если он используется ключевое слово var.

Анонимные типы создаются с помощью новых { имя = ... }. В этом случае он's новый, анонимный класс. Единственное, что вы можете присвоить его переменной, определенные с помощью VAR (или объекта), поскольку не существует имя.

Например:

var person = new { Name = "bob" };

В данном случае, это анонимный тип определяется во время выполнения.

Вообще, как @Chalkey говорит, Если вы хотите передать результат обратно в другой способ, использовать именованный тип, а не анонимные.

Если вы вынуждены использовать анонимный тип, вы'придется передавать его обратно, как объект типа Object``, а затем использовать отражение, чтобы получить его's свойства.

6
0
Jeff Yates
Jeff Yates
1-го июля 2009 в 6:10
2009-07-01T18:10:21+00:00
Дополнительно
Источник
Редактировать
#9219650

Jon Skeet написал блог о том, как это сделать, который совершенно справедливо озаглавлен Horribly Grotty Hack. Как следует из названия, вам не следует искать способы возврата анонимного типа. Вместо этого вам следует создать тип, который можно вернуть, поскольку это правильный способ реализации данной функции.

Поэтому я рекомендую вам создать конкретное определение возвращаемого типа, а затем ввести его в запрос, чтобы он был возвращен.

5
0
Chris Brandsma
Chris Brandsma
1-го июля 2009 в 7:20
2009-07-01T19:20:33+00:00
Дополнительно
Источник
Редактировать
#9219653

Это зависит от того, как вызывающий код будет использовать эти данные.

Если вы делаете простой привязки данных, действительно Дон'т волнует типа (т. е. вы Don'т иметь, чтобы явно получить доступ к свойствам в своем коде C#), вы можете передать результаты обратно как IEnumberable.

В большинстве случаев привязки данных вы вызываете свойства по имени, через "Волшебные струны", в любом случае, точный тип не'т имеет значения, в любом случае.

В противном случае, необходимо преобразовать анонимный тип для именованного типа.

2
0
David Robbins
David Robbins
1-го июля 2009 в 6:35
2009-07-01T18:35:23+00:00
Дополнительно
Источник
Редактировать
#9219652

Если у вас есть, чтобы обойти результаты в большое приложение, вы можете использовать словарь и Л;строка,объект и GT;. Да у вас есть некоторые накладные расходы при забросе, но, по крайней мере, вы уменьшаете вы выбрасываете объекты.

0
0
Похожие сообщества 10
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
3 542 пользователей
Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.
Открыть telegram
sql_ninja
sql_ninja
2 520 пользователей
Канал для тех, кто знает или интересуется SQL 🛢 Взаимная помощь и позитив =) Вакансии тут - @sql_jobs Бан за: оскорбления, спам, фри рекламу, расизм, сексизм. Наш MSSQL канал - @sqlcom По рекламе: @aveLestat
Открыть telegram
Microsoft Stack Jobs
Microsoft Stack Jobs
2 414 пользователей
Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks
Открыть telegram
С#
С#
2 330 пользователей
Стараемся не флудить. Пишем по делу. Правила: https://t.me/professorweb/430450 Для флуда @svoboda_obsh
Открыть telegram
SQL JOBS
SQL JOBS
2 144 пользователей
Обязательны: компания, город, позиция, вилка, наличие удалёнки, требования, контакты. Бан за рекламу, сексизм, расизм и неадекватный обсёр объявлений
Открыть telegram
CODE BLOG / C#
CODE BLOG / C#
1 772 пользователей
Чат для .NET разработчиков и C# программистов. По всем вопросам: @shwanoff Youtube-канал: https://youtube.com/codeblog Основной канал: @codeblog Вконтакте: https://vk.com/codeblog Правила: https://t.me/codeblog_csharp/246972 Вакансии по тегу #work
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 6 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
ID
JA
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией