Перебирайте данные, возвращаемые из var, чтобы получить имена и значения столбцов - PullRequest
0 голосов
/ 09 октября 2009

Я использую Linq to Entities в методе и возвращаю определенные столбцы данных из метода. Я не знаю, какой тип я буду возвращать, поэтому я сфальсифицировал его, чтобы вернуть список. Если кто-то знает способ лучше, чем я его сфальсифицировал, ПОЖАЛУЙСТА, дайте мне знать. Смотрите код ниже.

После возврата этих данных мне нужно перебрать столбцы, чтобы получить имя столбца и значение. Я вижу строку, содержащуюся в объекте, и это JSON. Он имеет "{Столбец1: Значение1, Столбец2: Значение2}". Как я могу выполнить итерацию, чтобы не просто получить значение, но и получить имя ... без использования отражения?

Вот пример метода, к которому я обращаюсь:

    public static List<object> GetDataSource(string QueryName)
    {
        MyEntity myEntity = new MyEntity();
        switch (QueryName)
        {
            case "FirstQuery":
                var s = (from x in myEntity.TableName
                         select new
                         {
                             Column1 = x.FirstColumn,
                             Column2 = x.SecondColumn
                         }).ToList();

                return s.Cast<object>().ToList();
        }
        return null;
    }

Ответы [ 2 ]

3 голосов
/ 09 октября 2009

Анонимные типы имеют локальную область. Вы не можете использовать их вне метода, в котором они были определены (кроме использования ужасного безумного хака ). Почему бы просто не определить некоторый класс домена, который будет представлять ваши данные строго типизированным образом:

public class Table
{
    public string Column1 { get; set; }
    public string Column2 { get; set; }
}

public static IEnumerable<Table> GetDataSource(string QueryName)
{
    MyEntity myEntity = new MyEntity();
    switch (QueryName)
    {
        case "FirstQuery":
            return from x in myEntity.TableName
                   select new Table
                   {
                       Column1 = x.FirstColumn,
                       Column2 = x.SecondColumn
                   };
    }
    return Enumerable.Empty<Table>();
}
0 голосов
/ 10 октября 2009

Мне удалось реализовать так, как вам нужно. У меня это сработало:

public class Table{
public string Column1 { get; set; }
public int Column2 { get; set; }}

 public static IEnumerable<T> GetDataSource<T>()
    {
        MyEntity myEntity = new MyEntity();

        if (typeof(T) == typeof(Table))
        {
            IQueryable<Table> query = from x in myEntity.Table1
                   select new Table
                   {
                       Column1 = x.TheColumn1,
                       Column2 = x.TheColumn2
                   };

           return query.ToList().Cast<T>();
        }
        if (typeof(T) == typeof(Table2))
        {
            IQueryable<Table2> query = from x in myEntity.Table2
                   select new Table2
                   {
                       TestColumn1 = x.TheColumn123,
                       TestColumn2 = x.TheColumn321
                   };

            return query.ToList().Cast<T>();
        }

        return Enumerable.Empty<T>();
    }

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

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