LINQ区分和排序

wfveoks0  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(121)

我有下面的查询,我希望它在“RegistrationNumber”上是不同的,并按“DriverToLoad”排序。
Distinct/grouping工作正常。但是,我的查询按“RegistrationNumber”排序,显然忽略了“OrderBy”:

Drive = await _db.Drive
                .Where(m => m.StatusId == 5 || m.StatusId == 1010 || m.StatusId == 1012)
                .Include(s => s.DriveStatus)
                .Include(d => d.Location)
                .Include(f => f.Item)
                .GroupBy(m => m.RegistrationNumber)
                .Select(g => g.OrderBy(m => m.DriverToLoad).First())
                .ToListAsync(),

有没有LINQMaven可以指出问题所在,以及如何解决?我正在使用.NET7。提前感谢。

2g32fytz

2g32fytz1#

我建议你这样做:

var Drive =
    await _db.Drive
        .Where(m => m.StatusId == 5 || m.StatusId == 1010 || m.StatusId == 1012)
        .Include(s => s.DriveStatus)
        .Include(d => d.Location)
        .Include(f => f.Item)
        .GroupBy(m => m.RegistrationNumber, m => m.DriverToLoad)
        .SelectMany(g => g.OrderBy(x => x).Take(1))
        .ToListAsync();

或者像这样:

var Drive =
    await
    (
        from m in _db.Drive
            .Include(s => s.DriveStatus)
            .Include(d => d.Location)
            .Include(f => f.Item)
        where m.StatusId == 5 || m.StatusId == 1010 || m.StatusId == 1012
        group m.DriverToLoad by m.RegistrationNumber into g
        from d in g.OrderBy(x => x).Take(1)
        select d
    )
        .ToListAsync();
aydmsdu9

aydmsdu92#

我已经解决了它,但可能不是最好的方式(...我会说更像是一个"黑客")。

var drive = await _db.Drive
        .Where(m => m.StatusId == 5 || m.StatusId == 1010 || m.StatusId == 1012)
        .Include(s => s.DriveStatus)
        .Include(d => d.Location)
        .Include(f => f.Item)
        .GroupBy(m => m.RegistrationNumber)
        .Select(g => g.OrderBy(m => m.DriverToLoad).First())
        .ToListAsync();

        DriveListViewModel model = new DriveListViewModel()
        {
            Drive = drive.OrderBy(a => a.DriverToLoad),
        };

这样我就得到了我想要的排序,并且可以将其返回给视图。
我还没有看到LINQ的强大功能,所以也许我应该把目标放在直接在我的控制器中使用ADO和SQL上,并以某种方式将其转换为列表以返回到我的视图中;-)
谢谢你们所有的好建议,我真的很感激。

相关问题