I have this linq query:
dr =
(from avTable in DAL.DataStore.DSet.Tables["Values1"].AsEnumerable()
join pavTable in DAL.DataStore.DSet.Tables["Values2"].AsEnumerable()
on avTable.Field<int>("PK") equals pavTable.Field<int>("FK_Value")
where
pavTable.Field<int>("FKI_ProductAttribute") == Value2 &&
avTable.Field<string>("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<int>("PK") equals pavTable.Field<int>("FK_Value")
where pavTable.Field<int>("FKI_ProductAttribute") == Value2
select avTable).FirstOrDefault();
I am trying to get a row if it has the desired specific value. Otherwise get the first or default.
This smells. Is there a better way to do this?
Clarification - 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<int>("PK") equals pavTable.Field<int>("FK_Value")
where
pavTable.Field<int>("FKI_ProductAttribute") == Value2 &&
avTable.Field<string>("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...I don't know. 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).
FirstOrDefault
is supposed to work ...? I don't see anything that 'smells' ...unless there is some optimization to the query. But nothing I can really see ... – IAbstract Sep 2 '11 at 20:50