我正在使用Linq查询数据库并返回通用的IList。
无论我如何尝试,都无法将IQueryable转换为IList。
这是我的代码。
我写的比这简单,我不明白为什么它不起作用。
public IList<IRegion> GetRegionList(string countryCode)
{
var query = from c in Database.RegionDataSource
where (c.CountryCode == countryCode)
orderby c.Name
select new {c.RegionCode, c.RegionName};
return query.Cast<IRegion>().ToList();
}
这将返回具有正确数量的项目的列表,但它们都是空的
请帮忙,我现在已经几天了
最佳答案
您的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();
}