簡體   English   中英

將System.Linq.IQueryable轉換為System.Collections.Generic.ICollection

[英]Convert System.Linq.IQueryable to System.Collections.Generic.ICollection

我是asp.net mvc的新手,我正在嘗試使用asp.net mvc 4和EF6創建一個網站,用戶可以在登錄后對表格進行排序。 我收到一個編譯錯誤,提示Cannot implicitly convert type System.Linq.IQueryable to System.Collections.Generic.ICollection 我的代碼如下

調節器

public ActionResult Login(string sortOrder)
    {
        if (Session["UserNAME"] != null)
        {
            ViewBag.CodeSort = String.IsNullOrEmpty(sortOrder) ? "code_desc" : "";
            var sortedOut = new MkistatVsUserLogin { mkistats = dsedb.mkistats.AsQueryable() };     //Error in this line

            switch (sortOrder)
            {
                case "code_desc":
                    sortedOut = sortedOut.OrderByDescending(s => s.MKISTAT_CODE);
                    break;
                default:
                    sortedOut = sortedOut.OrderBy(s => s.MKISTAT_CODE);
                    break;
            }
            return View(sortedOut.ToList());
        }
        else
        {
            return RedirectToAction("Home");
        }
    }

模型

public class MkistatVsUserLogin
{
    public mkistat mkistats { get; set; }
    public idx Idxs { get; set; }
}

我怎么解決這個問題。 急需此幫助。 TNX。

更新

Mkistat模型

public partial class mkistat
{
    public string MKISTAT_CODE { get; set; }
    public int MKISTAT_NUMBER { get; set; }
    public string MKISTAT_QUOTE_BASES { get; set; }
    public decimal MKISTAT_OPEN_PRICE { get; set; }
    public decimal MKISTAT_HIGH_PRICE { get; set; }
    public decimal MKISTAT_LOW_PRICE { get; set; }
    public decimal MKISTAT_SPOT_TOTAL_VALUE { get; set; }
    public string MKISTAT_LM_DATE_TIME { get; set; }        
}

您需要修改模型並將mkistats類型設置為IQueryable<mkistat> ,然后傳遞IQueryable<mkistat> ,其中屬性的類型為mkistat而不是IQueryable<mkistat> ,您必須這樣做:

public class MkistatVsUserLogin
{
    public IQueryable<mkistat> mkistats { get; set; }
    public idx Idxs { get; set; }
}

現在您的行動:

var sortedOut = new MkistatVsUserLogin 
                   { 
                     mkistats = dsedb.mkistats.AsQueryable(); 
                   };

如果要使用List<mkistat> htne進行處理,則模型應類似於:

public class MkistatVsUserLogin
{
    public List<mkistat> mkistats { get; set; }
    public idx Idxs { get; set; }
}

並采取行動:

var sortedOut = new MkistatVsUserLogin 
                   { 
                     mkistats = dsedb.mkistats.ToList(); 
                   };

顯然,mkistats實現了我的通用集合,並且通過調用.AsQueryable()來創建iQueryable集合。 如果需要它可查詢,請更改mkistats以實現iQueryable。

否則,您可以在其上調用.toList(),但是如果這些很重要,則會失去可查詢的支持和延遲加載。

編輯:看起來您不需要查詢,因此只需執行以下操作:

var sortedOut = new MkistatVsUserLogin { mkistats = dsedb.mkistats.AsQueryable().toList() };

可能還可以同時保留.AsQueryable()和.toList()。 但這並不重要,我無法解釋您的代碼如何組合在一起。

暫無
暫無

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

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