Использование ViewData с запросом на соединение - PullRequest
0 голосов
/ 01 апреля 2011

Обновление

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

Моя ViewModel

public class ViewProductions
{

    public string Venuename { get; set; }
    public string Showname { get; set; }
    public DateTime ProductionYear { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }


}  

Запрос

var query =  
                     from f in _db.Production
                     join g in _db.Run on f.show equals g.venue
                     select new ViewProductions {
                            Venuename = g.venue,
                            Showname = f.show,

                            StartDate = g.startDate,
                            EndDate = g.endDate


                     };

        return View(query);

У меня есть запрос в формате SQL

    SELECT Production.show, Run.venue, Run.startDate, Run.endDate,  Production.director, Production.designer
FROM  Production INNER JOIN
 Run ON Production.show = Run.show

Может ли кто-нибудь помочь мне преобразовать это в linq?

Еще раз спасибо

1 Ответ

1 голос
/ 02 апреля 2011

Это хорошее начало. Помня идея, что ViewModel будет содержать все данные, необходимые представлению. Сделайте его большим или меньшим, чем нужно.

если вы будете отображать список Show, вам может потребоваться изменить его на что-то вроде:

 public List<Show> {get; private set;}

если в данном объекте вы используете только одно свойство. Не беспокойтесь о создании свойства ViewData вместо использования всего объекта. Итак, пример:

public class Venue
{
    public string Name;
    public string State;
    public string City;
    public int Capacity;
    ...
}

Допустим, для данной модели ViewModel вам нужно только название объекта. Не нужно добавлять к нему все Место проведения, просто добавьте свойство VenuName.

A блог с хорошим объяснением.

EDIT

Здесь - несколько хороших примеров использования System.Data.Linq.SqlClient.SqlMethods , в частности, DATEDIFF. Вы могли бы сделать что-то вроде этого:

 where SqlMethods.DateDiffMonth(Book.EntryDate, DateTime.Now) <= 3 order by dates.startDate

РЕДАКТИРОВАТЬ 2

Попробуйте что-то вроде этого:

Пара указателей, обратите внимание на ViewModelProduction () , вы должны поставить (), чтобы указать, что вы создаете новые объекты. ToList () предназначен для преобразования IEnumerable, который возвращает LINQ. Также в этом случае я использую orderby на startDate. Посмотрите LINQ примеров . И это очень полезный инструмент: LinqPad .

var query = (from p in db.Production
            join r in _db.Run on p.show equals r.show
            orderby r.startDate
            select new ViewModelProduction()
            {
                show = p.show,
                venue = r.venue,
                startDate = r.startDate,
                endDate = r.endDate,
                director = p.director,
                designer = p.director
            }).ToList();
...