/ / Problemy z konwersją warunkowego miejsca, gdzie klauzula w LINQ z powrotem na SQL - sql, linq, warunkowe, where-clause

Mając problemy z konwersją warunkowej gdzie klauzula w LINQ z powrotem na SQL - sql, linq, warunkowa, gdzie-klauzula

Mam trochę marynaty!

Zrobiłem snazzy polecenie LINQ, które wykonuje pracę w mojej aplikacji internetowej, ale teraz chciałbym użyć tego w procedurze przechowywanej:

var r = (from p in getautocompleteweightsproducts.tblWeights
where p.MemberId == memberid &&
p.LocationId == locationid

select p);

if (level != "0")
r = r.Where(p => p.MaterialLevel == level);

if (column == "UnitUserField1")
r = r.Where(p => p.UnitUserField1 == acitem);

if (column == "UnitUserField2")
r = r.Where(p => p.UnitUserField2 == acitem);

return r.OrderBy(p => p.LevelNo).ToList();

Jednak nie mogę dla życia dostać warunkową klauzulę do pracy !!

Jeśli ktoś wskaże mi właściwy kierunek, będę wdzięczny.

Z poważaniem

Odpowiedzi:

1 dla odpowiedzi № 1

Może coś takiego?

SELECT *
FROM dbo.weights
WHERE member_id = @memberid
AND location_id = @locationid
AND material_level = CASE WHEN @level = "0" THEN material_level
ELSE @level END
AND @acitem = CASE @column WHEN "UnitUserField1" THEN unit_user_field_1
WHEN "UnitUserField2" THEN unit_user_field_2
ELSE @acitem END
ORDER BY level_no

1 dla odpowiedzi nr 2

Czy próbowałeś LinqPADJestem całkiem pewien, że ostatnim razem grałem z tymmożesz wpisać kod "LINQ to SQL" i zobaczyć wynikowy kod SQL, który został wygenerowany. W przeciwnym razie umieść SQL trace / profiler na kodzie z LinqTOSQL i znajdź kwerendę wykonywaną w śledzeniu.


0 dla odpowiedzi № 3

Odpowiedź Luke'a da ci właściwe wiersze,ale jest coś straconego, gdy próbujesz zastąpić maszynę generującą zapytania pojedynczym zapytaniem. Są części tego zapytania, które są nieprzejrzyste dla optymalizatora.

Jeśli potrzebujesz oryginalnych zapytań, które byłyby wygenerowane przez linq, istnieją dwie opcje.

  • Generuj wszystkie możliwe zapytania i kontroluj, które z nich uruchamia IF ELSE.
  • Użyj dynamicznego sql, aby skonstruować każde zapytanie (mimo że eliminuje to wiele korzyści wynikających z zastosowania procedury przechowywanej).

Jeśli zdecydujesz się użyć dynamicznego sql, powinieneś być świadomy przekleństwo i błogosławieństwa tego.