Ich versuche, eine vorhandene sql gespeicherte proc in Linq zu konvertieren. Der gespeicherte Prozess verwendet coalesce(), während er die where-Klausel aufbaut.C# linq sql Coalesce-Konvertierung
Unten ist, was ich versucht habe.
Können einige Ratschläge/andere auf die richtige Art und Weise geben, diese Umwandlung zu nähern?
------- sql
if @a is not null
set @WhereClause = @WhereClause + ' and v.a_number = ''' + @a + ''''
if @b is not null
set @WhereClause = @WhereClause + ' and v.b_number = ''' + @b + ''''
if @aDateMin is not null
set @WhereClause = @WhereClause + ' and coalesce(v.a_end_dt, v.a_start_dt, ''1/1/1753'')
>= ''' + convert(varchar(10), @aDateMin, 101) + ''''
if @aDateMax is not null
set @WhereClause = @WhereClause + ' and coalesce(v.a_start_dt, v.a_end_dt, ''12/31/9999'')
<= ''' + convert(varchar(10), @aDateMax, 101) + ''''
set @Sql = from Results v
@WhereClause ;';
--print @Sql
exec sp_executesql @Sql
----- Linq
var aNumber = "";
var bNumber = "";
DateTime? aDateMin = null;
DateTime? aDateMax = null;
var query = from v in searchResults
select v;
if(!String.IsNullOrEmpty(aNumber)){
query = query.Where(v => v.a_number == aNumber);
}
if(!String.IsNullOrEmpty(bNumber)){
query = query.Where(v => v.b_number == bNumber);
}
// this is where I'm having issue with the conversion.
if(aDateMin.HasValue){
query = query.Where(v =>
v.a_end_dt.HasValue ? v.a_end_dt >= aDateMin : v.a_start_dt.HasValue ? v.a_start_dt <= aDateMin : "1/1/1753");
}
Das „dynamische“ SQL gibt mir die Angst. – spender
Es ist nicht klar, wie 'aDateMin' möglicherweise nicht null ist. – spender
Deshalb muss ich es konvertieren. Der aDateMin-Wert wird aus dem Suchfeld in der Benutzeroberfläche kommen. – ironman