[英]IEnumerable<> to IList<>
我正在使用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-typing,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();
}
我很驚訝它不僅僅是完全失敗 - 你試圖將每個結果轉換為IRegion
,但是你正在生成匿名類型的實例,這肯定不會實現IRegion
。
你有一個實現IRegion
的具體類型嗎?
對IRegion
的演員不會奏效。 您正在選擇一個不會實現IRegion
的匿名類型。 有沒有辦法可以創建一個實現IRegion的實例?
也許你需要這樣的東西:
public IList<IRegion> GetRegionList(string countryCode)
{
var query = from c in Database.RegionDataSource
where (c.CountryCode == countryCode)
orderby c.Name
select new Region()
{
RegionCode = c.RegionCode,
RegionName = c.RegionName
};
return query.ToList();
}
也許你需要這樣的東西:
public IList<IRegion> GetRegionList(string countryCode)
{
var query = from c in Database.RegionDataSource
where (c.CountryCode == countryCode)
orderby c.Name
select new Region()
{
RegionCode = c.RegionCode,
RegionName = c.RegionName
};
return query.ToList();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.