c# - GroupBy 与三元运算符

标签 c# linq group-by

我有一个 Person 对象:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Address { get; set; }
    public double Height { get; set; }
    public bool IsTest { get; set; }
}

然后我有一个包含不同 Person 对象的列表。

我想知道是否有一种方法可以根据对象的某些属性在 LINQ 中将三元运算符与 GroupBy 一起使用。例如:

var groupedPersons = persons.GroupBy(person => person.IsTest ? 
                      new {
                              person.Name, 
                              person.Age, 
                              person.Address
                           } 
                     : new {
                              person.Name, 
                              person.Age, 
                              person.Address, 
                              person.Height}).ToList();

但不幸的是这不起作用,给了我异常(exception)

Type of conditional expression cannot be determined because there is no implicit conversion between 'AnonymousType#1' and 'AnonymousType#2'

这完全可以实现吗?如何实现?

谢谢

编辑:试过了,但没有用。

var groupedPersons = persons.GroupBy(person => person.OnTest ? 
                     new Person { 
                                   Address = person.Address, 
                                   Name = person.Name, 
                                   Age = person.Age } 
                     : new Person { 
                                   Address= person.Address, 
                                   Name = person.Name, 
                                   Age = person.Age , 
                                   Height = person.Height}).ToList();

编辑:让它工作,看看我的回答

最佳答案

可以使用匿名对象。您只需确保它们具有相同的字段名称和字段类型:

var groupedPersons = persons.GroupBy(person => person.IsTest ? 
                      new {
                              person.Name, 
                              person.Age, 
                              person.Address,
                              Height = 0
                           } 
                     : new {
                              person.Name, 
                              person.Age, 
                              person.Address, 
                              person.Height}).ToList();

编辑: 现在我想到了,您可以在分配 Height 时使用三元运算符来节省一些代码行。如果你担心高度为0的人和测试人员分组,你也可以按IsTest分组。

var groupedPersons = persons.GroupBy(person => 
                      new {
                              person.Name, 
                              person.Age, 
                              person.Address,
                              Height = person.IsTest ? 0 : person.Height,
                              person.IsTest
                           }).ToList();

关于c# - GroupBy 与三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12519508/

相关文章:

c# - 在 MVVM WPF 中将 DataTable 绑定(bind)到 DataGrid

C# 初学者 - 在同一个函数中回调

c# - Linq 语法 - 选择多列

c# - 使用 GroupBY 创建分组

c# - 我如何将 C# string[] 编码(最好在 SWIG 中)到 C++ string*?

c# - 从返回 int 的非托管代码中获取外部函数是否安全

c# - 当您还选择 EFCore 3.1.11 中的其他对象列表时,左连接不会带来所有结果

sql - 根据它们之间的间隔对时间戳进行分组

vb.net - 使用 linq vb.net 进行分组和计数

php - MySQL 抓取用户的所有帖子以及每个帖子的所有点赞(加入、分组、计数等)