如何以正确的方式交出我的对象类型?

时间:2013-12-12 10:19:39

标签: c# linq visual-studio

在以下方法中,我尝试从一种类型的对象中选择特定的ID。以上所有工作,但最后一部分,我将查询中的对象交给特定对象Type(T)的列表会产生问题,下面的方法也不接受我的输入。我可以想象,在运行时这应该都可以正常工作,但是visual-studio不接受它。

    private static Guid[] SelectiveQuery<T>(Guid[] ga, T input, string a)
    {
        List<T> li = new List<T>();

        foreach (Guid g in ga)
        {
            var query = from produkt in Entity.ProduktCollection.produktCollection
                        let p = produkt as Entity.Produkt
                        from version in p.version
                        let v = version as Entity.Version
                        from customer in v.customerCollection
                        let c = customer as Entity.Customer
                        from fehler in v.fehlerCollection
                        let f = fehler as Entity.Fehler
                        select new {p, v, c, f};

            switch (a)
            {
                case "produkt":
                    query = query.Where(x => x.p.id == g); break;
                case "version":
                    query = query.Where(x => x.v.id == g); break;
                case "customer":
                    query = query.Where(x => x.c.id == g); break;
                case "fehler":
                    query = query.Where(x => x.f.id == g); break;
                case "kategorie":
                    query = query.Where(x => x.f.kategorie.id == g); break;
            }

            query = query.Where(x => x.GetType() == typeof(T));

                li.AddRange(query); //contains error ("System.Collections.Generic.IEnumerable<AnonymousType#1>" can't be converted to "System.Collections.Generic.IEnumerable<T>"
        }
        // Reduce() removes duplicates in li and returns the list
        li = Reduce(li, i => i.id); //contains error (T doesn't contain a definition for id)
        // Guids() makes a list of all IDs inside li and returns this List<Guid>
        return Guids(li, i => i.id); //contains error (T doesn't contain a definition for id)
    }

1 个答案:

答案 0 :(得分:0)

您是否尝试将ToList()语句添加到where语句?

query = query.Where(x => x.GetType() == typeof(T)).ToList();

我记得Where语句的结果是一个过于通用的集合,因此需要先进行投射。

由于我看到你正在使用AddRange,它也可能需要转换为数组,如果第一个不起作用,则使用ToArray()语句而不是ToList()语句。我不确定你是否可以为AddRange()语句提供List。