将System.Linq.IQueryable转换为System.Collections.Generic.ICollection

时间:2015-02-26 05:42:10

标签: c# asp.net-mvc generics

我是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; }        
}

2 个答案:

答案 0 :(得分:1)

您需要修改模型并将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(); 
                   };

答案 1 :(得分:0)

显然mkistats正在实现我的泛型集合,并且通过调用.AsQueryable()来创建一个iQueryable集合。如果您需要它是可查询的,请更改mkistats以实现iQueryable。

否则你可以在它上面调用.toList(),但如果那些很重要,你就会失去可查询支持和延迟加载。

编辑:看起来你不需要查询,所以就这样做:

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

可能你也可以留下.AsQueryable()和.toList()。但这并不重要,我无法破译你的代码如何组合在一起。