我有一个 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/