Ваш оператор select
возвращает анонимный тип: new {c.RegionCode, c.RegionName}
Это не может быть преобразовано в IRegion
- это, в основном, типизирование Duck, которое C # не поддерживает.
Ваш оператор linq должен возвращать тип, который реализует IRegion
- тогда ваш код должен работать.
Однако он не должен запускаться - Cast<IRegion>
должен выдавать исключение времени выполнения.
В основном:
// this isn't anonymous, and should cast
public class MyRegion : IRegion {
public string RegionCode {get;set;}
public string RegionName {get;set;}
}
public IList<IRegion> GetRegionList(string countryCode)
{
var query = from c in Database.RegionDataSource
where (c.CountryCode == countryCode)
orderby c.Name
select new MyRegion {RegionCode = c.RegionCode, RegionName = c.RegionName};
return query.Cast<IRegion>().ToList();
}
Обновление
Если базовый тип Linq реализует IRegion
, это может быть намного проще:
public IList<IRegion> GetRegionList(string countryCode)
{
var query =
from region in Database.RegionDataSource
where region.CountryCode == countryCode
orderby region.Name
select region;
return query.ToList();
}