【问题标题】:C# Create a Truncated Collection with LINQ [duplicate]C# 使用 LINQ 创建截断集合 [重复]
【发布时间】:2014-01-23 18:33:42
【问题描述】:

我不知道这是否可能,但可以说我有一个 List 和一个具有 X 个属性的对象。然后我想过滤列表,但我只想从列表中取回非常具体的属性。我希望用 LINQ 来做到这一点

我知道我可以使用SELECT,但这仍然保留了我不想要的属性,只有空白值。但我不希望这些属性出现在结果列表中。这个可以吗?

【问题讨论】:

  • 返回一个匿名类,只包含所需的属性

标签: c# linq


【解决方案1】:

如果您选择特定类型的实例,并且不填充其所有值,那么您确实会收到具有未填充值的实例。听起来您想选择一种全新的类型。

您可以创建自定义类型:

public class SomeType
{
    public string SomeValue { get; set; }
}

并选择该类型的实例:

.Select(x => new SomeType { SomeValue = x.SomeValue })

或者,如果您不想定义该类,您可以将其内联选择为匿名类型:

.Select(x => new { SomeValue = x.SomeValue });

两者在使用代码时的行为通常相同。

【讨论】:

  • 谢谢!最后一项是我真正想要的,匿名类型。效果很好,让我得到了我需要的东西。
【解决方案2】:

使用 Select 方法可以轻松完成:

var filteredList = list.Select(element => 
                                   new MyClass  {
                                                 // set necessary properties like
                                                  Name = element.Name,
                                                  ...
                                                 }).ToList();

【讨论】:

    【解决方案3】:

    像这样:

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多