Linq查询加入 - 帮助

时间:2011-07-22 02:32:54

标签: c# sql linq

我正在尝试编写一个稍微复杂的LINQ to SQL查询。

我有一个名为

的表
Fruit (FruitID, FieldOne, FieldTwo)

FruitChangeHistory (FruitChangeHIstoryID, FruitID, Date)

我想要做的是将Fruit列表返回到视图中。但View模型将包含一个额外的字段LastChangeDate。如:FruitIDFieldOneFieldTwoLastChangedDate

我需要弄清楚如何使用fruitid加入fruitchangehistory,然后对日期进行排序并仅返回最新的更改日期。

这是我到目前为止所做的:

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 个答案:

答案 0 :(得分:1)

这样的事情:

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()
        }

答案 1 :(得分:1)

听起来你正在使用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()
}