如何用方法语法编写查询

时间:2016-06-29 14:03:24

标签: c# .net linq

如果有ObservableCollection的{​​{1}}个PrinterPrinters ... 每个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();

3 个答案:

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

您可以从查询结尾到开头一步一步地执行此操作:

  1. ToArray();逗留:

    ....ToArray();
    
  2. select

    ....Select(p => p.Index.ToString()).ToArray();
    
  3. where

    ....Where(p => p.IsSelected).Select(p => p.Index.ToString()).ToArray();        
    
  4. from(来源):

    Printers.Where(p => p.IsSelected).Select(p => p.Index.ToString()).ToArray();   
    
  5. 最后:

    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();
相关问题