LINQ从DTO对象列表中选择一个字段到数组

Lat*_*san 31 c# linq

我有DTO类定义订单行,如下所示:

public class Line
{
    public string Sku { get; set; }
    public int Qty    { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Line填充类型列表如下:

List<Line> myLines = new List<Line>();
myLines.Add(new Line() { Sku = "ABCD1", Qty = 1 });
myLines.Add(new Line() { Sku = "ABCD2", Qty = 1 });
myLines.Add(new Line() { Sku = "ABCD3", Qty = 1 });
Run Code Online (Sandbox Code Playgroud)

我想要的是使用LINQ从myLines列表中获取一系列SKU .我怎么能这样做呢?

我目前正在手动这样做...

// Get SKU List
List<string> mySKUs = new List<string>();
foreach (Line myLine in myLines)
    mySKUs.Add(myLine.Sku);
string[] mySKUsArray = mySKUs.ToArray();
Run Code Online (Sandbox Code Playgroud)

提前致谢.我试图谷歌寻求解决方案,但我不确定如何说出问题...

PS使用LINQ方法实现我目前正在做的事情有没有任何好处/性能提升foreach

Ree*_*sey 67

您可以使用:

var mySKUs = myLines.Select(l => l.Sku).ToList();
Run Code Online (Sandbox Code Playgroud)

Select方法,在这种情况下,执行从一个映射IEnumerable<Line>IEnumerable<string>(在SKU),然后ToList()将其转换为一个List<string>.

请注意,这需要using System.Linq;位于.cs文件的顶部.

  • @paqogomez会有类似的,虽然foreach可能稍快一点 - 在大多数情况下,这种类型的操作*的性能无关紧要*. (3认同)
  • @LatheesanKanes确保你在.cs文件的顶部有`using System.Linq;`... (2认同)

Kev*_*vin 6

这在 LinQ 中非常简单...您可以使用 select 语句来获取对象属性的 Enumerable。

var mySkus = myLines.Select(x => x.Sku);
Run Code Online (Sandbox Code Playgroud)

或者,如果你想要它作为数组,只需......

var mySkus = myLines.Select(x => x.Sku).ToArray();
Run Code Online (Sandbox Code Playgroud)