我有一个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();
但不幸的是,这行不通,给了我例外
无法确定条件表达式的类型,因为存在
在“ AnonymousType#1”和“ 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();