我正在尝试编写一个稍微复杂的LINQ to SQL查询。
我有一个名为
的表Fruit (FruitID, FieldOne, FieldTwo)
和
FruitChangeHistory (FruitChangeHIstoryID, FruitID, Date)
我想要做的是将Fruit
列表返回到视图中。但View模型将包含一个额外的字段LastChangeDate。如:FruitID
,FieldOne
,FieldTwo
,LastChangedDate
我需要弄清楚如何使用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
}
但不太按计划工作。
任何人都可以提供帮助吗?
答案 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()
}