如果有ObservableCollection
的{{1}}个Printer
个Printers
...
每个Printer
包含属性IsSelected
(bool)和Index
(int)...
如何将以下LINQ查询从查询语法转换为方法语法?
string[] printerListing =
(from p in Printers
where p.IsSelected
select p.Index.ToString()).ToArray();
我想出了以下内容,但它只返回查询中的第一个Printer
(为了便于阅读,分为多行):
var printers2 =
Printers.Where(p => p.IsSelected)
.FirstOrDefault()
.Index.ToString().ToArray();
答案 0 :(得分:3)
使用.Select(),其功能类似于查询语法中的select
关键字。
var printers2 = Printers
.Where(p => p.IsSelected)
.Select(x => x.Index.ToString())
.ToArray();
答案 1 :(得分:2)
string[] printerListing =
(from p in Printers
where p.IsSelected
select p.Index.ToString()).ToArray();
您可以从查询结尾到开头一步一步地执行此操作:
ToArray();
逗留:
....ToArray();
select
:
....Select(p => p.Index.ToString()).ToArray();
where
:
....Where(p => p.IsSelected).Select(p => p.Index.ToString()).ToArray();
from
(来源):
Printers.Where(p => p.IsSelected).Select(p => p.Index.ToString()).ToArray();
最后:
string[] printerListing =
Printers
.Where(p => p.IsSelected)
.Select(p => p.Index.ToString())
.ToArray();
实际上,它也是相反的,但有时相反的顺序更容易理解。
答案 2 :(得分:0)
您使用FirstOrDefault()
因此它会返回一个第一个元素,其中isSelected = true。
使用
var printers2 = Printers.Where(p => p.IsSelected)
.Select(x => x.Index.ToString).ToArray();