是否有一种简单的方法可以在两个List <t>之间进行转换?</t>

时间:2009-09-24 19:36:48

标签: c# linq-to-sql generics

var candidates = (from l in db.GetLeads(lat, lon, role, radius + 10)
                  orderby l.Distance
                  select l);
        return (List<CandidateResult>)candidates;

3 个答案:

答案 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();