Linq запрос с объединением - помощь - PullRequest
0 голосов
/ 22 июля 2011

Я пытаюсь написать слегка сложный запрос LINQ to SQL.

У меня есть таблица с именами

Fruit (FruitID, FieldOne, FieldTwo)

и

FruitChangeHistory (FruitChangeHIstoryID, FruitID, Date)

Что я хочуdo возвращает список Fruit в представление.Но модель View будет содержать дополнительное поле LastChangeDate.Так как: FruitID, FieldOne, FieldTwo, LastChangedDate

Мне нужно выяснить, как объединить в истории изменения фруктов с fruitid, затем отсортировать даты и вернуть только самую последнюю дату изменения.

Это то, что у меня есть:

var list = from p in EntityFramework.Fruits
join h on EntityFramework.FruitChangHistory
on p.FruitID equals h.FruitID
orderby h.LastChangedDate ascending
select new FruitVM
{
FruitID = p.FruitId,
FieldOne = p.FieldOne,
FieldTwo = p.FieldTwo,
LastChangedDate = h.Date
}

, но не совсем так, как планировалось.

Кто-нибудь может помочь?

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Звучит так, как будто вы используете Linq to Entities / Entity Framework, а не Linq to Sql.

Если у вашего Fruits объекта есть свойство навигации FruitChangeHistories (что звучит так, как должно, так как FruitChangeHistory имеет FK для Fruit), вы можете сделать:

var list = from p in EntityFramework.Fruits
select new FruitVM()
{
  FruitID = p.FruitId,
  FieldOne = p.FieldOne,
  FieldTwo = p.FieldTwo,
  LastChangedDate = FruitChangeHistories.OrderByDescending( x => x.Date)
                                        .FirstOrDefault()
}
1 голос
/ 22 июля 2011

Примерно так:

var list = from p in EntityFramework.Fruits
        select new FruitVM
        {
            FruitID = p.FruitId,
            FieldOne = p.FieldOne,
            FieldTwo = p.FieldTwo,
            LastChangedDate = (from h in EntityFramework.FruitChangHistory
                                where p.FruitID == h.FruitID
                                orderby h.LastChangedDate ascending
                                select h.LastChangedDate).FirstOrDefault()
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...