Selecting a specific row with a desired value I am trying to get a row if it has the desired specific value, otherwise get the first or default:

dr =
   (from avTable in DAL.DataStore.DSet.Tables["Values1"].AsEnumerable()
    join pavTable in DAL.DataStore.DSet.Tables["Values2"].AsEnumerable()
        on avTable.Field&lt;int&gt;("PK") equals pavTable.Field&lt;int&gt;("FK_Value")
    where 
          pavTable.Field&lt;int&gt;("FKI_ProductAttribute") == Value2 &amp;&amp;
          avTable.Field&lt;string&gt;("Name") == "Specific Value"
    select avTable).FirstOrDefault() ??
    (from avTable in DAL.DataStore.DSet.Tables["Values1"].AsEnumerable()
     join pavTable in DAL.DataStore.DSet.Tables["Values2"].AsEnumerable()
     on avTable.Field&lt;int&gt;("PK") equals pavTable.Field&lt;int&gt;("FK_Value")
     where pavTable.Field&lt;int&gt;("FKI_ProductAttribute") == Value2
     select avTable).FirstOrDefault();


This smells. Is there a better way to do this?

I want to do something like this:

var dt =
   (from avTable in DAL.DataStore.DSet.Tables["Values1"].AsEnumerable()
    join pavTable in DAL.DataStore.DSet.Tables["Values2"].AsEnumerable()
        on avTable.Field&lt;int&gt;("PK") equals pavTable.Field&lt;int&gt;("FK_Value")
    where 
          pavTable.Field&lt;int&gt;("FKI_ProductAttribute") == Value2 &amp;&amp;
          avTable.Field&lt;string&gt;("Name") == "Specific Value"
    select avTable)

DataRow dr = dt.Select("PK = Specified value");
If(dr==null) dr = dt.FirstOrDefault();


and then do a select based on a specified value. If that is null, then grab the first or default. This seems to be more DRY, but is it more or less efficient?. Also, I have a hard time doing a select on the dt based on the specific value (lack of Linq expertise and Google prowess to find the answer I am looking for).
Will this work?

var dr= (from avTable in DAL.DataStore.DSet.Tables["Values1"].AsEnumerable()
         join pavTable in DAL.DataStore.DSet.Tables["Values2"].AsEnumerable()
             on avTable.Field&lt;int&gt;("PK") equals pavTable.Field&lt;int&gt;("FK_Value");
         where
             (pavTable.Field&lt;int&gt;("FKI_ProductAttribute") == Value2 &amp;&amp;
              avTable.Field&lt;string&gt;("Name") == "Specific Value") ||
              pavTable.Field&lt;int&gt;("FKI_ProductAttribute") == Value2
         select avTable)
        .FirstOrDefault();


I don't really have a way to test this, but I believe if the first part of the where clause criteria is met, the part after the || is skipped. If the first part returns no record then the second part is evaluated and will return a result ...or null.