【问题标题】:MVC Entity Framework adding a int[] array list of categories to the view modelMVC 实体框架将一个 int[] 数组列表添加到视图模型中
【发布时间】:2012-03-22 05:09:25
【问题描述】:

我正在尝试将 int[] 类别的数组列表添加到视图 SelectedCategories,但出现以下错误:

base {System.SystemException} = {"LINQ to Entities 无法识别方法 'System.Nullable1[System.Int32][] ToArray[Nullable1](System.Collections.Generic.IEnumerable1[System.Nullable1[System.Int32]])' 方法, 并且这个方法不能翻译成 store 表达式。"}

任何有 MVC 实体框架经验的人都可以指出我哪里出错了。

代码:

(查看模型)

public class CandidateViewModel
{
    [ScaffoldColumn(false)]
    public int? CandidateID { get; set; }

    [DisplayName("Name")]
    public string CandidateName { get; set; }

    [DisplayName("City")]
    public string CityName { get; set; }

    [DisplayName("Rate (Per Hour)")]
    [DisplayFormat(DataFormatString = "{0:c}")] 
    public System.Nullable<decimal> UnitPrice { get; set; }

    [DisplayName("Start Date")]
    public System.DateTime StartDate { get; set; }

    [DisplayName("End Date)")]
    public System.DateTime EndDate { get; set; }

    public MultiSelectList CategoriesList { get; set; }

    public int?[] SelectedCategories { get; set; }
}



[Candidate Repository]
public IQueryable<CandidateViewModel> GetCandidatesProjected()
{
     var projectedCandidates = from p in GetCandidates()
                            select new CandidateViewModel
                            {

                                SchedulerID = p.id,
                                CandidateID = p.candidate_id,
                                StartDate = p.start_date,
                                EndDate = p.end_date,
                                SelectedCategories = p.Candidate.Candidate_Category.Where(a=>a.CandidateId==p.candidate_id).Select(b=>b.CategoryId).ToArray()

                            };

    return projectedCandidates;
}

【问题讨论】:

    标签: model-view-controller frameworks model repository entity


    【解决方案1】:
    1. 始终使用 IEnumerable 而不是数组。数组已经实现了 IEnumerable(我有朋友用 C# 编程了 5-6 年但不知道这一点)。

    2. 尽可能避免可为空的类型。没有选定的项目应该是 NoSelectedItem 特殊类,列表中的任何项目都不应该是空的可枚举。

    3. 从 IQueryable 结果获取视图模型中的数据时,调用 ToList() 以强制执行数据层中的查询。

    【讨论】:

      【解决方案2】:

      我很确定您需要将Select(b=&gt;b.CategoryId) 更改为Select(b=&gt;(int?)b.CategoryId),因为目前您选择的是IEnumerable&lt;int&gt;,然后转换为int[] 并分配给int?[]

      或者,您可以更改 public int?[] SelectedCategories { get; set; } 以返回 int[]IEnumerable&lt;int&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-08
        • 1970-01-01
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 2014-11-30
        • 1970-01-01
        相关资源
        最近更新 更多