Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 遍历从var返回的数据,以获取列的名称和值_C#_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

C# 遍历从var返回的数据,以获取列的名称和值

C# 遍历从var返回的数据,以获取列的名称和值,c#,linq,entity-framework,linq-to-entities,C#,Linq,Entity Framework,Linq To Entities,我在方法中使用Linq to实体,并从该方法返回特定的数据列。我不知道我将返回什么类型,所以我操纵它以返回列表。如果有人知道比我更好的方法,请告诉我。请参阅下面的代码 返回此数据后,我需要遍历列以获取列名和值。我可以看到对象中包含的字符串和JSON。它有“{Column1:Value1,Column2:Value2}”。我如何在不使用反射的情况下通过迭代不仅获取值,还获取名称 下面是我要调用的方法的一个示例: public static List<object> GetDat

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

返回此数据后,我需要遍历列以获取列名和值。我可以看到对象中包含的字符串和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;
    }
公共静态列表GetDataSource(字符串QueryName)
{
MyEntity MyEntity=新的MyEntity();
开关(QueryName)
{
案例“FirstQuery”:
var s=(从myEntity.TableName中的x开始)
选择新的
{
Column1=x.FirstColumn,
Column2=x.SecondColumn
}).ToList();
返回s.Cast().ToList();
}
返回null;
}

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

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>();
}
公共类表
{
公共字符串Column1{get;set;}
公共字符串Column2{get;set;}
}
公共静态IEnumerable GetDataSource(字符串QueryName)
{
MyEntity MyEntity=新的MyEntity();
开关(QueryName)
{
案例“FirstQuery”:
从myEntity.TableName中的x返回
选择新表
{
Column1=x.FirstColumn,
Column2=x.SecondColumn
};
}
返回可枚举的.Empty();
}

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

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>();
}
公共类表
{
公共字符串Column1{get;set;}
公共字符串Column2{get;set;}
}
公共静态IEnumerable GetDataSource(字符串QueryName)
{
MyEntity MyEntity=新的MyEntity();
开关(QueryName)
{
案例“FirstQuery”:
从myEntity.TableName中的x返回
选择新表
{
Column1=x.FirstColumn,
Column2=x.SecondColumn
};
}
返回可枚举的.Empty();
}

我设法实现了您需要的方式。这对我很有用:

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>();
    }
公共类表{
公共字符串Column1{get;set;}
公共int列2{get;set;}
公共静态IEnumerable GetDataSource()
{
MyEntity MyEntity=新的MyEntity();
if(类型(T)=类型(表格))
{
IQueryable query=来自myEntity.Table1中的x
选择新表
{
第1列=x.第1列,
第2列=x.第2列
};
返回query.ToList().Cast();
}
if(类型(T)=类型(表2))
{
IQueryable query=来自myEntity.Table2中的x
选择新表2
{
TestColumn1=x.列123,
测试柱2=x.柱321
};
返回query.ToList().Cast();
}
返回可枚举的.Empty();
}

我没有使用QueryName参数,但是如果有多个数据源可以IEnumerable,您可以随时添加它。

我设法实现了您需要的方法。这对我很有用:

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>();
    }
公共类表{
公共字符串Column1{get;set;}
公共int列2{get;set;}
公共静态IEnumerable GetDataSource()
{
MyEntity MyEntity=新的MyEntity();
if(类型(T)=类型(表格))
{
IQueryable query=来自myEntity.Table1中的x
选择新表
{
第1列=x.第1列,
第2列=x.第2列
};
返回query.ToList().Cast();
}
if(类型(T)=类型(表2))
{
IQueryable query=来自myEntity.Table2中的x
选择新表2
{
TestColumn1=x.列123,
测试柱2=x.柱321
};
返回query.ToList().Cast();
}
返回可枚举的.Empty();
}

我没有使用QueryName参数,但是如果有多个数据源可以IEnumerable,您可以随时添加它。

我希望能够返回不同的类型,因此如果我有一个case“SecondQuery”,我还需要能够返回类Table2。然后还有一个问题,就是通过迭代返回的数据来获取列名,这是我在没有反射的情况下无法做到的。我希望能够返回不同的类型,所以如果我有一个案例“SecondQuery”,我还需要能够返回类Table2。然后还有一个问题,就是通过迭代返回的数据来获取列名,这是我在没有反射的情况下无法做到的。这显然比我的被操纵的列表返回类型要好,但是使用我的GetDataSource,我不需要知道我将返回哪种类型。在这种情况下,我必须调用类型为(我不知道)的方法,例如“GetDataSource();”。我提前知道的就是要调用的查询名称。另外,如何在不使用反射的情况下检索列名(表类的属性)?我是p