簡體   English   中英

關於linq中的返回類型

[英]about return type in linq

我有一個包含多個字段的表,我只需要一個字段。 該表稱為ZipCompare。 我通常使用IQueryable <>作為linq查詢的返回類型。 但是對於以下代碼,出現錯誤,提示“無法將類型System.Linq.IQueryable<AnonymousType#1>隱式轉換為ZipCompare。那么我應該使用哪種返回類型?我使用此函數來填充dropdownlist控件。我的代碼是:

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#編寫。

查看您的查詢:

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();

然后,您更改數據綁定以綁定到值本身(也許使用“。”作為字段?或者也許使用空字符串?不確定)。

返回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;
}

也許您想返回字符串列表? 狀態看起來像一個字符串...

將返回類型更改為List<string>並執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM