【发布时间】:2012-09-20 19:23:27
【问题描述】:
我有一个 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();
编辑:让它工作,看看我的回答
【问题讨论】:
-
您是否尝试过选择新的“人员”而不是使用匿名类?
-
哦,谢谢...这很简单 :)
-
我很惊讶选择 Person 的作品,除非你的 person 类实现了 Equals() 和 GetHashCode()。如果这是 EF,那么我很确定它不会让您选择实体类的新实例。
-
是的,你是对的,这不能正常工作,但我设法让它工作:) 看看我的答案......