代码之家  ›  专栏  ›  技术社区  ›  Jonas Stawski

在LINQ查询中使用变量

  •  1
  • Jonas Stawski  · 技术社区  · 15 年前

    将此LINQ考虑在内:

    list.Where(sil => sil.XML.Element("ticket") != null && sil.XML.Element("ticket").Attribute("id").Value == smsRequestIn.TicketID)
    

    如果“ticket”元素不为空,它将搜索它两次,因此不是很有效。有没有办法在linq表达式中使用某种类型的变量,以便我可以引用该变量而不是对“ticket”元素进行双重搜索,或者linq是否足够聪明,不必进行双重搜索?

    3 回复  |  直到 15 年前
        1
  •  5
  •   Indeed is Trash    15 年前

    在linq表达式语法中 let 这样地:

    from sil in list
    let ticket = sil.XML.Element("ticket")
    where ticket != null && ticket.Attribute("id").Value == smsRequestIn.TicketID
    select sil;
    

    复制 使用扩展方法时,需要使用 Select 像这样的匿名类型

    list.Select(anon => new { ticket = anon.XML.Element("ticket"), anon })
        .Where(sil => sil.ticket != null && sil.ticket.Attribute("id").Value == smsRequestIn.TicketID)
        .Select(o=>o.anon);
    

    这就不那么清楚了。

        2
  •  3
  •   Ronald Wildenberg    15 年前

    我将把你的问题改写为:

    var result = from sil in list
                 let element = sil.XML.Element("ticket")
                 where element != null &&
                       element.Attribute("id").Value == smsRequestIn.TicketID
                 select sil;
    
        3
  •  0
  •   bruno conde    15 年前

    你可以这样做:

    Func<SilClass,bool> filter = sil => 
    { 
       XElement e = sil.XML.Element("ticket");
       return e != null && e.Attribute("id").Value == smsRequestIn.TicketID);
    };
    
    list.Where(filter);
    

    但在这种情况下,我认为像其他答案所建议的那样使用查询语法确实会使您受益匪浅。更清楚了。