Невозможно создать постоянное значение типа ''. В этом контексте поддерживаются только примитивные типы или типы перечисления. ASP.NET MVC LINQ EF

1

Я получаю необычную ошибку при попытке отобразить значение списка. Я пытаюсь получить все данные проекта в базе данных для каждого пользователя. Я думаю, что мое выражение LINQ неверно, но я не уверен.

Модель:

        public class ListModel
    {
        public List<StaffModel> StaffModelList { get; set; } 
    }
        public class StaffModel
    {
        public FlexModel Flex { get; set; }
        public List<Project> Projects { get; set; }
    }

        public partial class Project
    {
        public Project()
        {
            TimesheetEntries = new HashSet<TimesheetEntry>();
            UserProjects = new HashSet<UserProject>();
        }

        [StringLength(50)]
        public string ProjectId { get; set; }

        [Required]
        [StringLength(50)]
        public string ProjectName { get; set; }

        public int ProjectManager { get; set; }

        public bool IsDebitable { get; set; }

        [StringLength(50)]
        public string Customer { get; set; }

        public decimal EstimatedTotalHours { get; set; }

        [Column(TypeName = "date")]
        public DateTime ProjectStart { get; set; }

        [Column(TypeName = "date")]
        public DateTime? ProjectEnd { get; set; }

        public virtual User User { get; set; }

        public virtual ICollection<TimesheetEntry> TimesheetEntries { get; set; }

        public virtual ICollection<UserProject> UserProjects { get; set; }
    }

Посмотреть:

@model Aviato.ViewModel.ListModel
<table class="table">
    @foreach (var item in Model.StaffModelList)
    {
        <tr>
            <td>@item.Flex.User.UserId</td>
            <td>@item.Flex.FlexTime</td>
            <td>@item.Flex.User.SocialSecurityNumber</td>
            <td>@item.Flex.User.FirstName</td>
            <td>@item.Flex.User.LastName</td>
            <td>@item.Flex.User.Address1</td>
            <td>@item.Flex.User.ZipCode</td>
            <td>@item.Flex.User.City</td>
            <td>@item.Flex.User.PhoneNumber1</td>
            <td>@item.Flex.User.EmploymentStartDate</td>
            <td>@item.Flex.User.Password</td>

            @foreach (var items in item.Projects)
            {
                <td>@items.ProjectId</td>
                <td>@items.ProjectName</td>
                <td>@items.ProjectManager</td>
                <td>@items.IsDebitable</td>
                <td>@items.Customer</td>
                <td>@items.EstimatedTotalHours</td>
                <td>@items.ProjectStart</td>
                <td>@items.ProjectEnd</td>
            }
        </tr>
        @Html.ActionLink("Edit", "Edit", new { id = item.Flex.User.UserId })
        @Html.ActionLink("Delete", "Delete", new { id = item.Flex.User.UserId })
    }
</table>

контроллер:

private readonly AviatoModel _db = new AviatoModel(); //Database

public ActionResult Index()
{
    var projects = _db.Projects.ToList();
    var users = _db.Users.Where(u => u.Projects == projects).ToList(); //Where the Error occurs if I use: "ToList();"
    var model = new ListModel();
    var flexModel = new FlexModel();

    model.StaffModelList = new List<StaffModel>();

    foreach (var u in users) //Where the Error occurs if I dont use: "ToList();"
    {
        var staffModel = new StaffModel();

        staffModel.Projects = projects;
        staffModel.Flex = flexModel;
        staffModel.Flex.User = u;
        staffModel.Flex.FlexTime = GetFlex.Flex(u.UserId);
        model.StaffModelList.Add(staffModel);
    }

    return View(model);
}

Помоги мне, пожалуйста...

  • 1
    _db.Users.Where(u => u.Projects == projects) Есть ваша проблема - что вы пытаетесь сделать здесь?
Теги:
linq
entity-framework
asp.net-mvc

2 ответа

1

Вот ваша проблема:

var projects = _db.Projects.ToList();
    var users = _db.Users.Where(u => u.Projects == projects).ToList(); //Where the Error occurs if I use: "ToList();"

Вместо этого попробуйте:

var users = _db.Projects.Select(p => p.User).Distinct();
  • 0
    Проблема в том, что у меня отображается только 1 пользователь (администратор). Ну, он единственный, у которого есть проект, но я хотел бы показать остальных пользователей без каких-либо проектов, как я могу это сделать?
  • 0
    Привет ты там?
0

Измените свое действие на это. Таким образом, вы сможете получить всех пользователей независимо от того, есть ли у пользователя какие-либо проекты или нет.

public ActionResult Index()
{    
   var users = _db.Users.Include("Projects").ToList();

   var model = new ListModel();
   var flexModel = new FlexModel();

   model.StaffModelList = new List<StaffModel>();

   foreach (var u in users)
   {
       var staffModel = new StaffModel();

       staffModel.Projects.AddRange(u.Projects); //These are user specific projects. If there are no projects assigned to user, this list will be empty.
       staffModel.Flex = flexModel;
       staffModel.Flex.User = u;
       staffModel.Flex.FlexTime = GetFlex.Flex(u.UserId);
       model.StaffModelList.Add(staffModel);
   }

    return View(model);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню