如何在我创建的类中使用LINQ

时间:2015-04-21 10:03:26

标签: c# linq

这里我创建了MyList类。我想和我的班级一起使用LINQ。 我的课程下面:

class ListOfItems<T>: CollectionBase
    {
        List<T> list = new List<T>();
        public void Add(T car)
        {
            list.Add(car);
        }

        public void Add(T car, int index)
        {
            list.Insert(index, car);
        }
        public void Remove(int index)
        {
            list.RemoveAt(index);
        }

        public T getCar(int index)
        {
            return (T)list[index];
        }

        public int Count()
        {
            return list.Count;
        }

        public IEnumerable<T> getItems()
        {
            return list;
        }
    }

此外,我创建了类Car以在我的列表中收集它们。 在我的班级下面:

class Car
    {
        public string Model { get; set; }
        public int Age { get; set; }
        public double Volume { get; set; }

        public Car(string model, int age, double volume)
        {
            Model = model;
            Age = age;
            Volume = volume;
        }

        public override string ToString()
        {
            return "Model: " + Model + " Age: " + Age + " Volume: " + Volume; 
        }
    }

在我创建了一些类Car的实例后:

Car bmw = new Car("E34", 20, 2.5);
            Car audi = new Car("C5", 18, 2.8);
            Car toyota = new Car("camry", 20, 2.2);

            ListOfItems<Car> cars = new ListOfItems<Car>();
            cars.Add(bmw);
            cars.Add(audi);
            cars.Add(toyota);

我想在这里使用LINQ:

Console.WriteLine((cars.Where<Car>(p => p.Volume >= 2.5)).ToString())

据我所知,我还没有实现接口GetEnumerator()。所以我不明白。我问我的朋友(谷歌)有关它,但他说LINQ IN SQL ...所以我需要解释,并提出解决这个问题的建议。或链接到源。谢谢。

2 个答案:

答案 0 :(得分:1)

要实现您的需求,您必须实施IEnumerable<T>以及应该有所帮助的'CollectionBase',CollectionBase仅提供IEnumerable

请参阅alos LINQ and Generic Types

答案 1 :(得分:1)

我建议您添加另一个实现IEnumerable

的Class Named Cars
 class Cars : IEnumerable<Car>
{
    Car[] cars;
    public Cars(Car[] cars)
    {
        this.cars = cars;
    }

    public IEnumerator<Car> GetEnumerator()
    {
        for (int index = 0; index < cars.Length; index++)
            yield return cars[index];
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

然后你可以创建一个Car数组,将其作为参数传递给Cars,如下所示

Var C=new Cars(carArray);

您可以按照以下方式调用LINQ

Console.Writeline(C.SingleOrDefault(c=>c.Model=="Audi").ToString());

更新

这是类

的通用版本
 class GenericClass<T> : IEnumerable<T>
{
    T[] elements;
    public GenericClass(T[] elements)
    {
        this.elements = elements;
    }

    public IEnumerator<T> GetEnumerator()
    {
        for (int index = 0; index < cars.Length; index++)
            yield return elements[index];
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}