迭代从var返回的数据以获取列的名称和值

时间:2009-10-09 16:22:39

标签: c# linq entity-framework linq-to-entities

我在方法中使用Linq to Entities并从方法返回特定的数据列。我不知道我将返回什么类型,所以我操纵它返回一个List。如果有人知道比我操纵它更好的方式,请告诉我。请参阅下面的代码。

返回此数据后,我需要遍历列以获取列名和值。我可以看到对象中包含的字符串,它是JSON。它有“{Column1:Value1,Column2:Value2}”。我怎样才能迭代到不只是获取值,而是获得名称......不使用反射?

以下是我正在调用的方法示例:

    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 个答案:

答案 0 :(得分:3)

匿名类型是本地范围的。您不能在定义它们的方法之外使用它们(除了诉诸horrible grotty hack之外)。为什么不定义一些以强类型方式表示数据的域类:

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>();
}

答案 1 :(得分:0)

我设法实现了你需要的方式。它对我有用:

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的数据源,你总是可以添加它。