Linq to XML seleccionando un nodo se basa en un valor de atributo

Tengo un archivo xml que devuelve un conjunto de elementos que son únicos por un valor de atributo. Esto presenta un problema, ya que no puedo seleccionar un nodo por su nombre:

<doc>
    <float name="score">1.2873721</float>
    <arr name="2_category">
        <long>3021</long>
    </arr>
    <arr name="ATR_FamilyName">
        <str>Some Cookbook </str>
    </arr>
    <arr name="ATR_IsFamily">
        <str>0</str>
    </arr>
    <arr name="ATR_SellPrice">
        <str>49.95</str>
    </arr>
    <arr name="ATR_VendorId">
        <str>ABC</str>
    </arr>
    <arr name="ATR_VendorName">
        <str>WROX</str>
    </arr>      
</doc> 

Estoy usando linq para completar una clase de "Producto". Puedo seleccionar los elementos por posición, sin embargo, esto se convierte en un problema si el nodo no existe. ¿Hay alguna manera de seleccionar un nodo en función del valor de su atributo? En el ejemplo a continuación, ¿puedo obtener el nodo arr si el @name attribute = "ATR_FamilyName"? En xpath sería:

doc/arr[@name = 'ATR_FamilyName']/str

aquí está mi consulta de linq a xml:

var query = from rt in results
   where (String)rt.Descendants().ElementAt(5).Element("str").Value == "0"
   select new Product.Product
             {
                FamilyName = (String)rt.Descendants().ElementAt(3).Value
                // doc/arr[@name = 'ATR_FamilyName']/str - select Family Name is arr/@name 'ATR_FamilyName'                              
                MorePropertiestoset....                              
              };   

Respuestas a la pregunta(3)

Su respuesta a la pregunta