返回linq中Class的可枚举值?

时间:2009-05-24 16:57:19

标签: c# .net asp.net linq

我需要来自下层的可吸引价值,但会给出错误


   public static  Enumerable  LoadDataByName(string name)
        {
            List<StuffDepartman> Stuff = (List<StuffDepartman>)HttpContext.Current.Session["Stuffs"];
            var stuffs = from s in Stuff select s;

             stuffs = from s in Stuff where s.Name = name select s.Name;

            return stuffs.AsEnumerable();
        }

但是给我错误: System.Linq.Enumerable':静态类型不能用作返回类型

3 个答案:

答案 0 :(得分:2)

在.NET 3.5中,Enumerable中存在静态System.Linq,其中包含用于操作IEnumerable的扩展方法 - 这不是您想要的(或者显然是可以)返回。将它更改为IEnumerable,这是非通用的可枚举类(以及我认为你想要的),并且一切都应该正常工作。

更好的是,使用IEnumerable的通用版本,如下:

public static IEnumerable<StuffDepartman> LoadDataByName(string name)
{
    var stuffs = (List<StuffDepartman>)HttpContext.Current.Session["Stuffs"];

    return (from s in stuffs where s.Name == name select s.Name);
}

另外,请注意,在返回之前不需要调用AsEnumerable,因为List<T>实现了IEnumerable<T>,前者可以隐式地转换为后者。 =需要更改为==,因为您希望在此处使用相等而非分配运算符。其他变化只是整理。

答案 1 :(得分:1)

System.Linq.Enumerable是一个静态类,其上定义了一堆扩展方法。您可能想要返回IEnumerable<string>

答案 2 :(得分:0)

Enumerable是一个静态类,你想要做的是返回一个IEnumerable:

    public static  IEnumerable<string>  LoadDataByName(string name)
    {
      //do stuff
    }

我假设你的例子中的s.Name是一个字符串,这就是该方法应该返回IEnumerable&lt; string&gt;的原因。如果它是另一种类型,则将其更改为该类型....

编辑:好的,我猜这不是一个字符串。将其更改为:

    public static  IEnumerable<StuffDepartman>  LoadDataByName(string name)
    {
      //do stuff
    }