2016-03-24 21 views
1

我有一个查询两个表的LINQ查询,并成功返回记录。我希望它只返回最近的记录,但我无法使其正常工作。它会返回所有记录而不会出错。使用内连接在LINQ查询中选择最近的日期

我的查询是:

var viewModel = from area in db.area 
        join sample in db.sample on area.location_id equals sample.location_id 
        from s in db.sample.OrderByDescending(s => s.sample_date).Take(1) 

        select new AreaViewModel { h_area = area, s_sample = sample }; 

        return View(viewModel); 

完全卡住,帮助非常感谢!

回答

3

要调用在错误的地方Take()方法,你必须写一样的东西:

var viewModel = (from area in db.area 
       join sample in db.sample on area.location_id equals sample.location_id 
       from s in db.sample 
       select new AreaViewModel 
         { 
         h_area = area, 
         s_sample = sample 
         }).OrderByDescending(s => s.s_sample.sample_date) 
         .FirstOrDefault(); 

,如果你想返回集合,然后你可以使用Take(1)有代替FirstOrDefault(),因为它不会返回集合。

+0

这很好,欢呼! – emerfan

1

我想你正在努力实现的是:

var area= (from area in db.area 
      join sample in db.sample on area.location_id equals sample.location_id 
      orderby sample.sample_date descending 
      select new AreaViewModel { h_area = area, s_sample = sample }).FirstOrDefault(); 

调用FirstOrDefault方法,你会得到最新的记录,由于它增加了TOP(1)由您的LINQ生成的SQL查询查询。