将 System.Linq.IQueryable 转换为 System.Collections.Generic.ICollection
Convert System.Linq.IQueryable to System.Collections.Generic.ICollection
我是 asp.net mvc 的新手,我正在尝试使用 asp.net mvc 4 和 EF6 创建一个网站,用户可以在登录后对 table 进行排序。我收到一个编译错误 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 正在实现 I 通用集合,并且通过调用 .AsQueryable() 您正在创建一个 iQueryable 集合。如果您需要它是可查询的,请更改 mkistats 以实现 iQueryable。
否则你可以调用 .toList() ,但你失去了可查询的支持和延迟加载,如果这些很重要的话。
编辑:看起来您不需要可查询,所以只需这样做:
var sortedOut = new MkistatVsUserLogin { mkistats = dsedb.mkistats.AsQueryable().toList() };
您也可以只保留 .AsQueryable() 和 .toList()。但这并不重要,我无法破译你的代码是如何组合在一起的。
您需要修改您的模型并将 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();
};
我是 asp.net mvc 的新手,我正在尝试使用 asp.net mvc 4 和 EF6 创建一个网站,用户可以在登录后对 table 进行排序。我收到一个编译错误 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 正在实现 I 通用集合,并且通过调用 .AsQueryable() 您正在创建一个 iQueryable 集合。如果您需要它是可查询的,请更改 mkistats 以实现 iQueryable。
否则你可以调用 .toList() ,但你失去了可查询的支持和延迟加载,如果这些很重要的话。
编辑:看起来您不需要可查询,所以只需这样做:
var sortedOut = new MkistatVsUserLogin { mkistats = dsedb.mkistats.AsQueryable().toList() };
您也可以只保留 .AsQueryable() 和 .toList()。但这并不重要,我无法破译你的代码是如何组合在一起的。
您需要修改您的模型并将 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();
};