如何定义匿名列表的返回类型

时间:2013-01-14 13:23:33

标签: c# list class types return-value

我有以下方法:

public static object GetBarChart(int dataValue)
{
using (var myEntities = new i96X_dataEntities())
{
  var myValues = (from values in myEntities.PointValues
                  where values.PointID == dataValue
                  select new
                  {
                     values.DataTime,
                     values.DataValue
                  }).ToList();
  }
  if (myValues.Count() != 0)
  {
    return myValues;
  }
  return null;
}

我只能将它作为对象返回,因为我无法弄清楚如何将其定义为其类型。当我调试它告诉我返回类型是:

{System.Collections.Generic.List<<> f__AnonymousType2<的System.DateTime,双>>}

但我无法弄清楚如何定义它。

我定义了一个类:

public class BarChart
{
  public DateTime Time { get; set; }
  public double Value { get; set; }
}
public class BarList
{
  public List<BarChart> BarL { get; set; } 
}

我认为这是正确的。但是如果我现在使用BarList作为我的返回类型,编译器会读取:

无法转换表达式类型'System.Collections.Generic.List&lt; {DataTime:System.DateTime,DataValue:double}&gt;'返回类型BarList'

我认为答案只是定义BarChart,然后返回List&lt; BARCHART&GT;

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

该函数返回匿名类型的集合。匿名类型在LINQ表达式中定义。

如果您知道DB中PointValues集合的类型,那么您可以直接返回该类型。

如果你有一个名为 Point 的类,而不是将LINQ表达式中的匿名构造函数更改为具体的:

select new Point { Time = values.DataTime, Value = values.DataValue }

在这种情况下,您的方法将返回一个点列表。的的IList&LT;&LT;点&gt;&gt;

答案 1 :(得分:0)

你尝试过这样的事吗?

public static IEnumerable<Tuple<DateTime, DataValue>>  GetBarChart(int dataValue)
  {
  return
    (
    from values in new i96X_dataEntities()
    where values.PointID == dataValue
    select new Tuple<DateTime, DataValue>(values.DataTime, values.DataValue)
    );
  }