2015-04-02 80 views
0

如何將這兩個linq查詢重寫爲一個? .AncestorsAndSelf不支持null作爲元素名稱。linq AncestorsAndSelf使用null參數

 if (ancestorElementName == null) 
     { 
      ancestorElements = 
       currentElement 
       .AncestorsAndSelf() 
       .Select(
        . 
        . 
        . 
        ); 
     } 
     else 
     { 
      ancestorElements = 
       currentElement 
       .AncestorsAndSelf(ancestorElementName) 
       .Select(
        . 
        . 
        . 
        ); 
     } 
+0

爲了澄清你想使用LINQ選擇指定的元素是否爲空時? – Pseudonym 2015-04-02 19:34:27

回答

0

如何添加一個處理此方法選擇的擴展方法。這將允許您保持查詢的其餘部分相同。

如:

public static class MyLinqToXmlExtensions 
{ 
    public static IEnumerable<XElement> ForAncestorsAndSelf(this XElement e, XName name) 
    { 
     return name == null ? e.AncestorsAndSelf() : e.AncestorsAndSelf(name); 
    } 
}; 

然後你可以使用盡可能

ancestorElements = currentElement 
    .ForAncestorsAndSelf(ancestorElementName) 
    .Select(
      . 
      . 
      . 
      ); 
0

寫自己的擴展,如:

public static class MyExtensions 
{ 
    public static IEnumerable<XElement> MyAncestorsAndSelf(this IEnumerable<XElement> source, XName name) 
    { 
     if(name == null) 
     { 
      return source.AncestorsAndSelf(); 
     } 

     return source.AncestorsAndSelf(name); 
    } 
}