在以下方法中,我尝试从一种类型的对象中选择特定的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)
}
答案 0 :(得分:0)
您是否尝试将ToList()语句添加到where语句?
query = query.Where(x => x.GetType() == typeof(T)).ToList();
我记得Where语句的结果是一个过于通用的集合,因此需要先进行投射。
由于我看到你正在使用AddRange,它也可能需要转换为数组,如果第一个不起作用,则使用ToArray()语句而不是ToList()语句。我不确定你是否可以为AddRange()语句提供List。