MVC Entity Framework добавление списка категорий в массиве int [] в модель представления - PullRequest
0 голосов
/ 04 марта 2012

Я пытаюсь добавить массив int[] списка категорий в представление SelectedCategories, но получаю следующую ошибку:

base {System.SystemException} = {"LINQ to Entitiesне распознает метод «System.Nullable 1[System.Int32][] ToArray[Nullable 1] (System.Collections.Generic.IEnumerable 1[System.Nullable 1 [System.Int32]])», и этот метод нельзя преобразовать в выражение хранилища. "}

Может ли кто-нибудь, имеющий опыт работы с MVC Entity Framework, указать, где я ошибаюсь.

Код:

(Просмотреть модель)

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

Ответы [ 2 ]

0 голосов
/ 04 марта 2012
  1. Всегда используйте IEnumerable вместо массивов.Массивы уже реализуют IEnumerable (у меня есть друзья, программирующие в течение 5-6 лет на C #, которые этого не знают).

  2. По возможности избегайте обнуляемых типов.Ни один выбранный элемент не должен быть специальным классом NoSelectedItem, ни один элемент в списке не должен быть пустым перечисляемым.

  3. При получении данных в модели представления из результата IQueryable вызовите ToList () дляпринудительное выполнение запросов на уровне данных.

0 голосов
/ 04 марта 2012

Я вполне уверен, что вам нужно изменить Select(b=>b.CategoryId) на Select(b=>(int?)b.CategoryId), поскольку в настоящее время вы выбираете IEnumerable<int>, затем конвертируете в int[] и присваиваете int?[].

В качестве альтернативы вы можете изменить public int?[] SelectedCategories { get; set; }, чтобы вернуть либо int[], либо IEnumerable<int>.

...