Имя «XYZ» не существует, пока группа выполняется запросом LINQ

Я получаю ошибку ниже

Имя «XYZ» не существует, пока группа выполняется запросом LINQ

Это мой метод действия, который пробовал.

public ActionResult Gellery()
    {
        var list = db.EventGallerys
            .GroupBy(eg => new { EventId, Title, EventDate, Description, ThumbImage })
            .OrderByDescending(eg => eg.EventDate)
            .Take(5)
            .AsEnumerable()
            .Select(eg => new
            {
                EventId = eg.EventId,
                Day = eg.EventDate.ToString("D"),
                Month = eg.EventDate.ToString("MMM"),
                Year = eg.EventDate.ToString("yyyy"),
                Title = eg.Title,
                Description = eg.Description,
                ThumbImage = eg.ThumbImage
            }).ToList();

        return View(list);
     }

Ниже моя ошибка отображается в формате изображения

введите здесь описание изображения

Ниже мой вчерашний пост с требованиями, но до сих пор не получил должного результата.

Первые 5 запросов LINQ с группой с использованием Платформа сущностей

Я также попробовал этот запрос, но получил ошибку.

  LINQ to Entities does not recognize the method 'System.String ToString(System.String)' method, and this method cannot be translated into a store expression.

   var list = (from p in db.EventGallerys
                    group p by new { p.EventId, p.EventDate, p.Title, p.Description, p.ThumbImage } into r
                    select new
                    {
                        EventId = r.Key.EventId,
                        Day = r.Key.EventDate.Day,
                        Month = r.Key.EventDate.ToString("MMM"),
                        Year = r.Key.EventDate.Year,
                        Title = r.Key.Title,
                        Description = r.Key.Description,
                        ThumbImage = r.Key.ThumbImage,
                        EventDate = r.Key.EventDate
                    }).OrderByDescending(c => c.EventDate).ToList().Take(5);


          return View(list);

Ниже мой дизайн обратного просмотра

@model List<IBAC.Models.EventGallery>
@{
ViewBag.Title = "Gellery";
}
<br /><br /><br />
<h2>Gellery</h2>


@foreach (var item in Model)
{
  <a href='@Url.Content("~/GalleryImages/" + item.ThumbImage)'>
      <img class='thumbnail' src='@Url.Content("~/GalleryImages/" + item.ThumbImage)' />
</a>

}

person mazhar    schedule 04.08.2018    source источник
comment
ToString("MMM") не может быть переведен в SQL, поэтому вы получаете ошибку во втором коде. Вы можете просто сделать Month = r.Key.EventDate.Month   -  person Chetan Ranpariya    schedule 04.08.2018
comment
Пожалуйста, добавьте свой ответ. @ЧетанРанпария   -  person mazhar    schedule 04.08.2018


Ответы (2)


Вы являетесь анонимным объектом linq Group by, вам нужно указать имя свойства для значения group by, а когда вы используете linq select, вам нужно использовать key, чтобы получить значение.

var list = db.EventGallerys.GroupBy(eg => new {
                            EventId = eg.EventId,
                            Title = eg.Title,
                            EventDate = eg.EventDate,
                            Description = eg.Description,
                            ThumbImage = eg.ThumbImage })
                       .OrderByDescending(eg => eg.Key.EventDate)
                       .Take(5)
                       .Select(eg => new
                       {
                           EventId = eg.Key.EventId,
                           Day = eg.Key.EventDate.ToString("D"),
                           Month = eg.Key.EventDate.ToString("MMM"),
                           Year = eg.Key.EventDate.ToString("yyyy"),
                           Title = eg.Key.Title,
                           Description = eg.Key.Description,
                           ThumbImage = eg.Key.ThumbImage
                       }).ToList();

ИЗМЕНИТЬ

Вам нужно использовать класс viewModel для переноса ваших данных в View, потому что EventGallery этот класс является моделью картографа DB.

В этом случае вы можете попробовать использовать класс EventGalleryViewModel в качестве бритвы @model

public class EventGalleryViewModel
{
    public string EventId { get; set; }
    public string Day { get; set; }
    public string Month { get; set; }
    public string Year { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string ThumbImage { get; set; }
}

Контроллер

public ActionResult Gellery()
{
    var list = db.EventGallerys.GroupBy(eg => new {
                            EventId = eg.EventId,
                            Title = eg.Title,
                            EventDate = eg.EventDate,
                            Description = eg.Description,
                            ThumbImage = eg.ThumbImage })
                       .OrderByDescending(eg => eg.Key.EventDate)
                       .Take(5)
                       .Select(eg => new EventGalleryViewModel()
                       {
                           EventId = eg.Key.EventId,
                           Day = eg.Key.EventDate.ToString("D"),
                           Month = eg.Key.EventDate.ToString("MMM"),
                           Year = eg.Key.EventDate.ToString("yyyy"),
                           Title = eg.Key.Title,
                           Description = eg.Key.Description,
                           ThumbImage = eg.Key.ThumbImage
                       }).ToList();

    return View(list);
 }

Вид

@model List<EventGalleryViewModel>
@{
ViewBag.Title = "Gellery";
}
<br /><br /><br />
<h2>Gellery</h2>


@foreach (var item in Model)
{
  <a href='@Url.Content("~/GalleryImages/" + item.ThumbImage)'>
      <img class='thumbnail' src='@Url.Content("~/GalleryImages/" + item.ThumbImage)' />
</a>

}
person D-Shih    schedule 04.08.2018
comment
Список дает правильный результат при возврате с этой ошибкой: элемент модели, переданный в словарь, имеет тип «System.Collections.Generic.List1[<>f__AnonymousType27[System.String,System.String,System.String,System.String,System.String, System.String,System.String]]", но для этого словаря требуется элемент модели типа "System.Collections.Generic.List1[IBAC.Models.EventGallery]'., but this dictionary requires a model item of type 'System.Collections.Generic.List1[IBAC.Models.EventGallery]". а также проверьте, что я обновил свое мнение по этому вопросу. @D-Shih - person mazhar; 04.08.2018
comment
Пожалуйста, проверьте этот URL-адрес, опубликованный вчера: «5 лучших запросов linq с группой с использованием структуры сущностей»> stackoverflow.com/questions/51676305/ . @Д-Ших - person mazhar; 04.08.2018
comment
@mazhar Я редактирую свой ответ, я бы посоветовал вам использовать ViewModel вместо передачи анонимного объекта View - person D-Shih; 04.08.2018
comment
В чем преимущество использования EventId = eg.EventId, по сравнению только с eg.EventId,? - person mjwills; 04.08.2018
comment
На самом деле у меня уже есть класс модели с именем: EventGallery, как показано в приведенном выше URL-адресе, и зачем снова просматривать класс модели, просто читая na. Вы означает, что я должен сохранить класс EventGallery, и я должен добавить еще один класс EventGalleryViewmodel na, потому что я очень люблю mvc5. @Д-Ших - person mazhar; 04.08.2018
comment
Если у вас уже есть модель для просмотра, вы можете создать модель в linq вместо анонимного класса @mazhar. - person D-Shih; 04.08.2018
comment
Пожалуйста, объясните, что я новичок в mvc5, и если я создам один класс xyz, который используется в dbcontextclass, и снова я должен класс xyzViewModel его обязателен - теперь я создаю класс, как вы сказали EventGalleryViewModel. @Д-Ших - person mazhar; 04.08.2018
comment
После добавления EventGalleryViewModel возникает эта ошибка: элемент модели, переданный в словарь, имеет тип «System.Collections.Generic.List1[<>f__AnonymousType27[System.String,System.String,System.String,System.String,System.String,System.String, System.String]]», но для этого словаря требуется элемент модели типа «System.Collections.Generic.List`1[IBAC.Models.EventGalleryViewModel]». . @Д-Ших - person mazhar; 04.08.2018
comment
Вы уверены, что .Select(eg => new EventGalleryViewModel() используете EventGalleryViewModel в своем linq от контроллера? - person D-Shih; 04.08.2018

Ват о:

db.EventGallerys .GroupBy(eg => new { EventId = eg.EventId, Title = eg.Title, EventDate = eg.EventDate, Description = eg.Description, ThumbImage = eg.ThumbImage }); 
person Noel Santos    schedule 04.08.2018