【发布时间】:2014-01-23 18:33:42
【问题描述】:
我不知道这是否可能,但可以说我有一个 List 和一个具有 X 个属性的对象。然后我想过滤列表,但我只想从列表中取回非常具体的属性。我希望用 LINQ 来做到这一点
我知道我可以使用SELECT,但这仍然保留了我不想要的属性,只有空白值。但我不希望这些属性出现在结果列表中。这个可以吗?
【问题讨论】:
-
返回一个匿名类,只包含所需的属性
我不知道这是否可能,但可以说我有一个 List 和一个具有 X 个属性的对象。然后我想过滤列表,但我只想从列表中取回非常具体的属性。我希望用 LINQ 来做到这一点
我知道我可以使用SELECT,但这仍然保留了我不想要的属性,只有空白值。但我不希望这些属性出现在结果列表中。这个可以吗?
【问题讨论】:
如果您选择特定类型的实例,并且不填充其所有值,那么您确实会收到具有未填充值的实例。听起来您想选择一种全新的类型。
您可以创建自定义类型:
public class SomeType
{
public string SomeValue { get; set; }
}
并选择该类型的实例:
.Select(x => new SomeType { SomeValue = x.SomeValue })
或者,如果您不想定义该类,您可以将其内联选择为匿名类型:
.Select(x => new { SomeValue = x.SomeValue });
两者在使用代码时的行为通常相同。
【讨论】:
使用 Select 方法可以轻松完成:
var filteredList = list.Select(element =>
new MyClass {
// set necessary properties like
Name = element.Name,
...
}).ToList();
【讨论】:
像这样:
class Foo
{
public int PropertyOne { get; set; }
public string PropertyTwo { get; set; }
}
var theList = new List<Foo> {
// some foo go here
};
var filtered = theList.Select(f=> new {PropertyOne = f.PropertyOne }).ToList();
【讨论】: