我有一个DTO类,它定义订单行如下:
public class Line
{
public string Sku { get; set; }
public int Qty { get; set; }
}
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 });
我想要的是使用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();
我试着在谷歌上搜索解决方案,但我不知道该如何表达这个问题。
P.S.使用LINQ
方法来实现我目前使用foreach
所做的事情是否有任何好处/性能增益?
5条答案
按热度按时间ztigrdn81#
您可以使用:
在本例中,
Select
方法执行从IEnumerable<Line>
到IEnumerable<string>
(SKU)的Map,然后ToList()
将其转换为List<string>
。请注意,这要求
using System.Linq;
位于. cs文件的顶部。e5nqia272#
这在LinQ中非常简单...您可以使用select语句来获取对象的属性的Enumerable。
或者如果你想把它作为一个数组...
nwwlzxa73#
我想你是在寻找
然而,如果你打算在后续代码中迭代sku,我建议不要使用
ToArray()
位,因为它会过早地强制执行查询,使应用程序的性能变差。0md85ypi4#
您可以选择myLines列表的所有Sku元素,然后将结果转换为数组。
xfyts7mz5#
如果您对极其微小的、几乎不可估量的性能提升感兴趣,请向
Line
类添加一个构造函数,给出如下结果:然后使用一个新方法
Add
创建一个基于List<Line>
的专用集合类:然后,通过使用集合初始化器,填充列表的代码就变得不那么冗长了:
当然,正如其他答案所述,使用LINQ将SKU提取到字符串数组中是很简单的: