Как вернуть объект (или список объектов) анонимного типа из запроса LINQ в пользовательский интерфейс (консольное приложение) в C #? - PullRequest
0 голосов
/ 29 декабря 2018

Допустим, я запрашиваю несколько таблиц с помощью LINQ, используя соединения и groupbys, в результате чего получается IQueryable<'a> анонимных объектов, которые я хочу передать на уровень пользовательского интерфейса.Как мне это сделать?

Я могу вернуть IQueryable<'a> (IQueryable анонимного типа), если тип возвращаемого значения метода простой неуниверсальный IQueryable.Но как мне использовать этот неуниверсальный объект IQueryable, как я могу получить доступ к свойствам содержащихся анонимных объектов?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Вы можете использовать кортежи значений, поэтому возвращайте новый кортеж значений следующим образом:

public (string Name, int Age, DateTimeOffset Timestamp)[] GetValues()
{
    return database.Where(x => ...)
        .Select(x => (Name: x.Name, Age: x.Age, Timestamp: DateTimeOffset.Now))
        .ToArray();
}

Затем вы получаете универсальный массив с кортежами значений в качестве результата и можете получить доступ к этим значениям, используя данное свойствоимена, например, такие:

var array = GetValues();
var age = array.First(x => x.Name == "John Doe").Age;

Таким образом, вы получаете гибкость, не требуя определения пользовательского типа

0 голосов
/ 29 декабря 2018

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

public class DTO
{
    public int PropA { get; set; }
    .......
    .......
}

, а затем материализовать ваш запрос в DTO:

public List<DTO> GetData()
{
    return query.Select(x= > new DTO() 
                 {
                   PropA = x.SomeColumn,
                   ...........
                   ...........
                 }).ToList();
}

Надеюсь, это поможет.

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