关于linq的返回类型

时间:2012-02-23 21:50:54

标签: c# linq

我有一个包含多个字段的表,我只需要一个字段。该表称为ZipCompare。 我通常使用IQueryable&lt;&gt;作为linq查询的返回类型。但是对于下面的代码,出现了一个错误“不能隐式地将类型System.Linq.IQueryable<AnonymousType#1>转换为ZipCompare。那么我应该使用什么返回类型?我使用此函数来填充下拉列表控件 我的代码是:

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网络应用程序,我用c#编写。

4 个答案:

答案 0 :(得分: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 :(得分: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;
}

答案 2 :(得分:0)

也许你想要返回一个字符串列表?州看起来像一个字符串......

答案 3 :(得分:0)

将您的退货类型更改为List<string>并执行此操作:

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