var candidates = (from l in db.GetLeads(lat, lon, role, radius + 10)
orderby l.Distance
select l);
return (List<CandidateResult>)candidates;
答案 0 :(得分:5)
如果我理解你的问题,你可以使用Cast扩展方法,即:
return candidates.Cast<CandidateResult>();
答案 1 :(得分:3)
嗯,您的“候选人”变量不是List<T>
- 对于某些IEnumerable<T>
来说,它是T
。
但是,List<T>
即使在C#4中也不是T
的变体(因为它是一个类,并且类是不变的;并且因为它在输入和输入中都使用T
输出位置)。
您最简单的解决方案是首先获得正确的序列类型,然后调用ToList
:
var candidates = (from l in db.GetLeads(lat, lon, role, radius + 10)
orderby l.Distance
select (CandidateResult) l);
return candidates.ToList();
如果您愿意,可以拨打Cast
,如下所示,但在这种特殊情况下,我认为不会让它变得更好。
var candidates = (from l in db.GetLeads(lat, lon, role, radius + 10)
orderby l.Distance
select l);
return candidates.Cast<CandidateResult>()
.ToList();
请注意,当你真的只做一件事(在这种情况下排序)时,通常更简单的是不使用查询表达式,例如。
return db.GetLeads(lat, lon, role, radius + 10)
.OrderBy(l => l.Distance)
.Cast<CandidateResult>()
.ToList();
答案 2 :(得分:1)
怎么样:
var candidates = (from l in db.GetLeads(lat, lon, role, radius + 10)
orderby l.Distance
select l).ToList();