2013-08-03 2 views
2

Я действительно плохо разбираюсь в LINQ и не могу понять простую проблему. У меня есть веб-API MVC с контроллером. У меня есть метод внутри контроллера, чтобы возвращать данные для комментариев, введенных пользователем для элемента.LINQ query JOIN две таблицы для метода контроллера веб-API

Структура данных проста - Комментарии и таблицы пользователей с колонкой Идентификатор_пользователя, действующими в качестве внешнего ключа

Чтобы решить эту проблему, у меня есть следующий метод, который имеет запрос LINQ, чтобы сделать соединение между Комментариями и пользователем таблицы и вернуть объект в новый расширенный объект, который объединяет комментарии и данные пользователя. Кажется, я не могу захватить данные из таблицы User. Кто-то может помочь?

public IQueryable<CommentsWithUserDetails> GetReviewsWithUserByItem(int ID) 
    { 
     var query = from x in db.Comments 
        join y in db.Users on x.CommentsUserID equals y.UserID into z 
        where x.CommentsItemID.Equals(ID) 
        select new CommentsWithUserDetails 
        { 
         CommentsUserID = x.CommentsUserID, 
         CommentsText = x.CommentsText, 
         CommentsRating = x.CommentsRating, 
         CommentsDate = x.CommentsDate, 
         UserFirstName = y.FirstName, 
         UserLastName = y.LastName, 
         UserPictureURL = y.PictureURL 
        }; 

     return query; 
    } 
+1

Вы присоединились все в г, поэтому использовать г вместо х! – Fals

+0

вы также можете удалить 'in z' – Nilesh

+0

на самом деле ... почему у вас даже есть предложение where. Веб-интерфейс API позволяет использовать строки запросов OData для применения «фильтра». – Aron

ответ

4

Решение только для удаления части «в z» из запроса, да так просто!

Как указано на @Nilesh и @Gert Арнольд