gpt4 book ai didi

c# - 无法使用集合初始值设定项初始化类型,因为它未实现 'System.Collections.IEnumerable'

转载 作者:行者123 更新时间:2023-12-05 08:54:31 27 4
gpt4 key购买 nike

我有 3 个主菜单实体。和子菜单。我创建了菜单 View 模型。

我的实体:

主菜单.cs:

public UstMenuler()
{
AltMenuler = new HashSet<AltMenuler>();
}

public int ID { get; set; }
public string Name { get; set; }
public bool AktifMi { get; set; }
public int YetkiID { get; set; }
public string ControllerName { get; set; }
public string ActionName { get; set; }
public virtual Yetkilendirme Yetkilendirme { get; set; }
public virtual ICollection<AltMenuler> AltMenuler { get; set; }

子菜单.cs:

public partial class AltMenuler
{
public AltMenuler()
{
UstMenuler = new HashSet<UstMenuler>();
}

[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }
public int? YetkiID { get; set; }
public string Name { get; set; }
public string ActionName { get; set; }
public string ControllerName { get; set; }
public virtual Yetkilendirme Yetkilendirme { get; set; }
}

我的 View 模型:

public class MenuViewModel
{
public UstMenuler UstMenuler { get; set; }
public AltMenuler AltMenuler { get; set; }
}

我的 Controller :

dbContext = new MarkettingDbContext();

int sessionYetkiID = (int)Session["yetkiID"];
MenuViewModel menuler = new MenuViewModel();

var query = (from menu in dbContext.UstMenuler
where (menu.YetkiID == sessionYetkiID)
select new MenuViewModel
{
menuler.UstMenuler.ID = menu.ID,
menuler.UstMenuler.Name = menu.Name,
menuler.UstMenuler.YetkiID = menu.YetkiID,
menuler.UstMenuler.ControllerName = menu.ControllerName,
menuler.UstMenuler.ActionName = menu.ActionName
}).ToList();

我在执行查询时遇到错误。例如我的 sessionID 是 1,我想获取主菜单和子菜单。

最佳答案

问题是你的对象初始值设定项:

select new MenuViewModel
{
menuler.UstMenuler.ID = menu.ID,
menuler.UstMenuler.Name = menu.Name,
menuler.UstMenuler.YetkiID = menu.YetkiID,
menuler.UstMenuler.ControllerName = menu.ControllerName,
menuler.UstMenuler.ActionName = menu.ActionName
}

首先,您在对象初始值设定项中使用了 menuler,我不确定为什么。接下来,您尝试分配给子属性,即使它确实编译了,也会导致 NullReferenceException。总的来说,这基本上不是您想要做的:)

相反,我会使用以下两个选项之一。

如果您乐于将 menu 参数中的 UstMenuler 引用复制到新的 View 模型实例中,您可以非常轻松地做到这一点:

select new MenuViewModel { UseMenuler = menu }

或者,如果您想创建一个新的 UstMenuler 并从 menu 复制属性:

select new MenuViewModel
{
UstMenuler = new UstMenuler
{
ID = menu.ID,
Name = menu.Name,
YetkiID = menu.YetkiID,
ControllerName = menu.ControllerName,
ActionName = menu.ActionName
}
}

无论哪种方式,您都不需要您的 menuler 变量,您似乎没有在其他任何地方使用它。

听起来您正在使用 LINQ to Entities,听起来您可能想要将数据库查询部分与投影部分分开。在您的情况下,最简单的方法是避免查询表达式语法,因此您可以轻松调用 AsEnumerable 。例如:

var query = dbContext.UstMenuler
.Where(menu => menu.YetkiID == sessionYetkiID)
.AsEnumerable() // Do the projection in-process
.Select(menu => new MenuViewModel
{
UstMenuler = new UstMenuler
{
ID = menu.ID,
Name = menu.Name,
YetkiID = menu.YetkiID,
ControllerName = menu.ControllerName,
ActionName = menu.ActionName
}
})
.ToList();

关于c# - 无法使用集合初始值设定项初始化类型,因为它未实现 'System.Collections.IEnumerable',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49599570/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com