2012-02-23 117 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); 
}