我有两张桌子。表一包含区域列表,表二包含样本列表,每个样本行包含Area_ID
作为外键。
我需要检索Area表中的所有记录,只包含最新的相应Sample Status。我有这个查询,但它只返回一个带有Sample表中最新样本的Area:
var result = (
from a in db.area
join c in db.sample
on a.location_id equals c.location_id
select new
{
name = a.location_name,
status = c.sample_status,
date = c.sample_date
}).OrderByDescending(c => c.date).FirstOrDefault();
答案 0 :(得分:2)
解决方案可能会过滤您的第二个DbSet
:
var result = from a in db.area
join c in db.sample.Where(s=>s.location_id==a.location_id).OrderByDescending(c => c.sample_date).Take(1)
on a.location_id equals c.location_id
select new
{
name = a.location_name,
status = c.sample_status,
date = c.sample_date
};
另一种解决方案可能是应用group join:
var result = from a in db.area
join c in db.sample
on a.location_id equals c.location_id into samples
let sample=samples.OrderByDescending(c => c.sample_date).FirstOrDefault()
select new
{
name = a.location_name,
status = sample.sample_status,
date = sample.sample_date
};
如果使用导航属性可能会更容易。假设您在Area
和Sample
之间存在一对多的关系:
var result =from a in db.area
let sample= a.Samples.OrderByDescending(c => c.sample_date).FirstOrDefault()
select new
{
name = a.location_name,
status = sample.sample_status,
date = sample.sample_date
};