C# 如何使用join获取具有最大日期的记录?

C# 如何使用join获取具有最大日期的记录?,c#,sql,linq,C#,Sql,Linq,在林克我该怎么做 select MAX(d.DepartureDateRange),MAX(d.ReturnDateRange) from Tour t join TourCategory tc on t.ID = tc.TourID join TourDates td on t.ID = td.TourID join Dates d on d.ID = td.DatesID where tc.CategoryID = 3 and t.ID = 12 数据库图在这里-> 例如,jo

在林克我该怎么做

select  MAX(d.DepartureDateRange),MAX(d.ReturnDateRange)   
from Tour t join
TourCategory tc on t.ID = tc.TourID
join TourDates td on t.ID = td.TourID
join Dates d on d.ID = td.DatesID
where tc.CategoryID = 3 and t.ID = 12 
数据库图在这里->

例如,joins是这样的,但我无法获取DepartureDateRange和ReturnDateRange的最大值

var query2 = from t in db.Tour
    join tc in db.TourCategory on t.ID equals tc.TourID
    join td in db.TourDates on t.ID equals td.TourID
    join d in db.Dates on td.DatesID equals d.ID
    where tc.CategoryID == 3
    select new IndexTour
    {
        ID = t.ID,
        TourName = t.TourName,
        //DepartureDateRange = 
        //ReturnDateRange = 
        Description = t.SmallDesc,
        Price = t.Price,
        CoverPhotoUrl = t.CoverPhotoUrl,
        TourProgram = t.TourDesc
    };
提前谢谢。

我想这就是你想要的

var dateRanges = tours
    .Join(tourCategories,
        t => t.Id,
        tc => tc.TourId,
        (t, tc) => (t, tc))
    .Join(tourDates,
        ttc => ttc.t.Id,
        td => td.TourId,
        (ttc, td) => (ttc, td))
    .Join(dates, 
        ttctd => ttctd.td.DateId,
        d => d.Id,
        (ttctd, d) =>
        new {
            TourId = ttctd.ttc.t.Id,
            CategoryId = ttctd.ttc.tc.CategoryId,
            DepartureDateRange = d.DepartureDateRange,
            ReturnDateRange = d.ReturnDateRange
        });

var filtered = dateRanges
    .Where(r => r.CategoryId == 3 && r.TourId == 12);

var maxDepartureDateRange = filtered.Max(d => d.DepartureDateRange);
var maxReturnDateRange = filtered.Max(d => d.ReturnDateRange);
在这里(日期按行程分组):


SQL返回一行两条记录(按整个数据集分组),但LINQ表达式返回IndexTour列表。您需要每次巡演的最长日期还是整个选择的最长日期(根据SQL)?谢谢您的回答。我需要每次旅行的最长日期。我想你需要在那之前有一个团队。也许我的团队可以帮你?
var query2 = 
    from t in db.Tour
    join tc in db.TourCategory on t.ID equals tc.TourID
    where tc.CategoryID == 3
    // join dates aggregates grouped by tour id
    join tdates in
        from td in db.TourDates 
        join d in db.Dates on td.DatesID equals d.ID
        group d by td.TourID into grp
        select new 
        { 
            tourID = grp.Key, 
            departure = grp.Max(g => g.DepartureDateRange), 
            rtrn = grp.Max(g => g.ReturnDateRange)
        }
    on t.ID equals tdates.tourID
    select new IndexTour
    {
        ID = t.ID,
        TourName = t.TourName,
        DepartureDateRange = tdates.departure,
        ReturnDateRange = tdates.rtrn,
        Description = t.SmallDesc,
        Price = t.Price,
        CoverPhotoUrl = t.CoverPhotoUrl,
        TourProgram = t.TourDesc
    };