2012-02-23 69 views
1

我有一個表有多個字段,我只需要一個字段。該表稱爲ZipCompare。 我通常使用IQueryable <>作爲linq查詢的返回類型。但對於下面的代碼,錯誤弄出來說:「不能隱式轉換類型System.Linq.IQueryable<AnonymousType#1>到ZipCompare那我應該用什麼樣的返回類型我用這個功能來填充下拉列表控制 我的代碼是:?關於返回類型linq

public IQueryable<ZipCompare> GetStates() 
    { 
     VettingDataContext dc = new VettingDataContext(_connString); 
     dc.DeferredLoadingEnabled = true; 
     var query = (from c in dc.ZipCompares 
        select new { States = c.State }).Distinct(); 
     return query; 
    } 

前端代碼:

ddl_BilState.DataSource = zipDAL.GetStates(); 
     ddl_BilState.DataTextField = "States"; 
     ddl_BilState.DataValueField = "States"; 
     ddl_BilState.DataBind(); 

這是一個.NET Web應用程序,我使用C#

回答

4

看看你的查詢:

var query = (from c in dc.ZipCompares 
      select new { States = c.State }).Distinct(); 

這並不是選擇一個ZipCompare--它是選擇一個匿名類型。目前尚不清楚你試圖做什麼,但如果你想要返回IQueryable<ZipCompare>你的select子句將需要選擇一個ZipCompare

如果你不要想要返回一個ZipCompare ...在這種情況下,它看起來像你不需要匿名類型。只需使用:

var query = (from c in dc.ZipCompares 
      select c.State).Distinct(); 

或者說得更簡潔:

return dc.ZipCompares.Select(c => c.State).Distinct(); 

然後你就改變了數據綁定綁定到本身的價值(作爲該領域或許或許空字符串「」?不確定)。

1

返回IEnumerable<TypeOfStateProperty>,並更改您的查詢不使用匿名類型。舉例來說,如果StateStateEnum值:

public IEnumerable<StateEnum> GetStates() 
{ 
    VettingDataContext dc = new VettingDataContext(_connString); 
    dc.DeferredLoadingEnabled = true; 
    var query = (from c in dc.ZipCompares select c.State).Distinct(); 
    return query; 
} 
0

也許你想返回字符串的列表?國家看起來像一個字符串...

0

您的返回類型更改爲List<string>並做到這一點:

foreach(var item in query) 
{ 
    myList.Add(item.States); 
}