我在方法中使用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;
}
答案 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的数据源,你总是可以添加它。