c# - 林克 : Use variable in a GroupBy

标签 c# linq

我已帮助此 LINQ 请求: 我的 C#:

var stats = UoW.Repository
    .Get(echangeFilter)
    .GroupBy(a => new
    {
        Id = MyBLL.IsInComing(a.idSens) ? MyBLL.FindByNoContactModel(a.change.idTo.GetValueOrDefault()).id : MyBLL.FindByNoContactModel(a.change.idFrom.GetValueOrDefault()).id,
        Tri = MyBLL.IsInComing(a.idSens) ? MyBLL.FindByNoContactModel(a.change.idTo.GetValueOrDefault()).Tri: MyBLL.FindByNoContactModel(a.change.idFrom.GetValueOrDefault()).Tri,
        SensAppel = a.echange_sens.nom
    })
    .Select(group => new
    {
        group.Key.Id, 
        group.Key.Tri,
        group.Key.SensAppel,
        Count = group.Count(),
    })
    .OrderBy(g => g.Tri)
    .ToList();

它有效,但我想删除这个 groupBy 中这个可怕的重复(Id 和 Tri),我该如何处理?在这个概念中,我想使用一个变量来调用这个三元一次

最佳答案

如果使用查询语法,则可以声明变量。

这就是您的查询在查询语法中的样子(请正确命名您的变量。我不知道您实际上在做什么,所以我无法命名它们...):

var query = from a in UoW.Repository
    .Get(echangeFilter)
    group a by new
    {
        Id = MyBLL.IsInComing(a.idSens) ? MyBLL.FindByNoContactModel(a.change.idTo.GetValueOrDefault()).id : MyBLL.FindByNoContactModel(a.change.idFrom.GetValueOrDefault()).id,
        Tri = MyBLL.IsInComing(a.idSens) ? MyBLL.FindByNoContactModel(a.change.idTo.GetValueOrDefault()).Tri: MyBLL.FindByNoContactModel(a.change.idFrom.GetValueOrDefault()).Tri,
        SensAppel = a.echange_sens.nom
    } into g
    let b = new
    {
        group.Key.Id, 
        group.Key.Tri,
        Count = group.Count(),
    }
    orderby g.Tri
    select g;
var stats = query.ToList();

现在我们可以引入一个let:

var query = from a in UoW.Repository
    .Get(echangeFilter)
    let x = MyBLL.IsInComing(a.idSens) ? MyBLL.FindByNoContactModel(a.change.idTo.GetValueOrDefault()) : MyBLL.FindByNoContactModel(a.change.idFrom.GetValueOrDefault())
    group a by new
    {
        Id = x.id,
        Tri = x.Tri,
        SensAppel = a.echange_sens.nom
    } into g
    let b = new
    {
        g.Key.Id, 
        g.Key.Tri,
        Count = g.Count(),
    }
    orderby g.Tri
    select g;
var stats = query.ToList();

关于c# - 林克 : Use variable in a GroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59956104/

相关文章:

c# - Linq DataContext 最佳实践

c# - 从单个(平面)数据库查询创建复合对象的方法

c# - LINQ - GroupBy 和项目到新类型?

c# - WPF ListView 的资源管理器主题?

c# - 在 C# 中从 Base36 解码为十进制

c# - 日期中的月份无效 - Informix 中的日期格式偶尔会恢复

c# - DataTable 上的 LINQ 查询 - 找不到查询模式的实现

c# - 将 Color32[] 数组快速复制到 byte[] 数组

c# - ReSharper 总是要求将 System.Action 更改为 System.Action<T>

sql - 匹配多个字段组合的记录