【问题标题】:LINQ: select specific value in a datatable columnLINQ:在数据表列中选择特定值
【发布时间】:2021-05-01 11:48:49
【问题描述】:

在表中我有 4 列 GroupName、Display、Value 和 ID 我怎样才能在显示中显示特定数据。我只想显示一些 groupNames 数据 例如我只想显示 Groupname = company 和 display = Forbes

这是我的 linq

                sample = (from c in smsDashboardDBContext.CodeDefinitions
                                  orderby c.Display ascending
                                                                    
                                  select new CodeDefinitionDTO

                                  {
                                      GroupName = c.GroupName,
                                      Display = c.Display,
                                      Value = c.Value,
                                      Id = c.Id

                                  }).ToList();

【问题讨论】:

  • 你试过where c.GroupName == "company" 吗?
  • @Chronicle 抱歉,我的问题不太清楚。我想显示所有组名,例如“组”,以及组名中的其他内容,但在 GroupName 公司中,我只想显示福布斯,只是过滤掉其他公司

标签: c# linq


【解决方案1】:

您可以在查询中添加where 语句。

where c.GroupName == "company" && c.Display == "Forbes"

【讨论】:

  • 我不喜欢查询语法,我更喜欢方法语法,但我一直认为使用查询语法时不能使用相等运算符。你不应该改用equals这个词,还是我完全错了?
  • == 的 C# 反射器使用 Equals 方法 stackoverflow.com/questions/5796169/… 所以用法相同。这在 C# 中可能更可取,因为NullReferenceExceptions 可能会在第一个字符串为空时发生。
【解决方案2】:

我只想显示一些 groupNames 数据,例如我只想显示 Groupname = company 和 display = Forbes

在 ToList 之前,使用 Where 仅保留您想要显示的项目:

var company = ...
var forbes = ...
var result = smsDashboardDBContext.CodeDefinitions
    .OrderBy(codeDefinition => codeDefintion.Display)
    .Select(codeDefinition => new CodeDefinitionDTO
    {
        Id = codeDefinition.Id,
        GroupName = codeDefinition.GroupName,
        Display = codeDefinition.Display,
        Value = codeDefinition.Value,
    })
    .Where(codeDefinition => codeDefition.GroupName == company
                          && codeDefintion.Display == forbes);

言辞:

  • 按属性 codeDefintion.Display 的升序对 CodeDefintions 表中的所有 codeDefinitions 进行排序。
  • 从这个有序序列中的每个 codeDefinition 创建一个新的 CodeDefinitionDTO,并填充以下属性:Id、GroupName、Display、Value
  • 从该 CodeDefinitionDTO 序列中的每个 codeDefinition 中,仅保留属性 GroupName 的值等于 company 且属性 Display 的值等于 forbes 的那些 codeDefinition。

还有改进的余地!

假设您的表格有一百万个元素,在 Where 之后,只剩下五个元素。然后,您将一劳永逸地对近一百万个元素进行排序。考虑先执行 Where,然后是 Order,最后是 Select。

在 LINQ 中,尝试尽快执行Where:以下所有语句都必须在较少的项目上起作用

在 LINQ 中,尝试尽可能晚地执行 Select,最好是在 ToList / FirstOrDefault / 之前……这样选择必须针对尽可能少的元素进行 p>

所以首先是 Where,然后是 OrderBy,然后是 Select,最后是 ToList / FirstOrDefault 等:

var result = smsDashboardDBContext.CodeDefinitions
    .Where(codeDefinition => ...);
    .OrderBy(codeDefinition => codeDefintion.Display)
    .Select(codeDefinition => new CodeDefinitionDTO
    {
       ...
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2021-11-28
    相关资源
    最近更新 更多