Възможни ли са динамични параметри за клауза where във въведен набор от данни?

Нормалните ASP.NET TableAdapters са добри за прости клаузи where, например - "where city = @city and state = @state and zip = @zip"

Но как да проектирам DAL, който ми позволява да използвам произволна комбинация от параметрите - "търсене само по град" или "търсене по zip и държава" или "търсене по град и държава".....или дори по-сложно " търсене по zip, но ако @zip е нула, тогава търсене по град"....

Как мога да проектирам DAL, който поддържа такива динамични условия? Типизираните набори от данни с адаптери за таблици ли са най-добрият подход? В момента просто използвам динамични SQL заявки с нормални набори от данни и се опитвам да го преобразувам в някакъв вид строго въведен DAL.


person achilles19282    schedule 16.02.2010    source източник


Отговори (1)


Звучи ми така, сякаш бихте искали да прегледате Dynamic LINQ. Може да бъде полезно, когато съществуват такива динамични условия. Намерих примерните кодове тук за много полезни.

HTH, Сид

person SidC    schedule 16.02.2010
comment
Благодаря, Сид, донякъде се притеснявам да правя всички DAL неща с LINQ, в случай че се окаже, че MS реши да убие (напълно/частично) LINQ по-късно. Но независимо дали LINQ остава или си отива, има ли някакъв друг подход за проектиране на DAL, който може да реши този проблем с динамичната клауза where? - person achilles19282; 16.02.2010
comment
Ахил, идват ми на ум две възможни идеи. Първо, и не толкова чисто, е да създадете sprocs, за да изберете данни от вашата таблица, като използвате zip, град или държава или множество параметри. След това във вашия презентационен слой създайте контрола, която използва падащ списък и текстово поле, където падащият списък позволява на потребителя да избере в кое поле да се търси - град, щат или пощенски код. Редакцията започва оттук: Не смятам, че LINQ към ADO.NET обекти ще се развива някъде скоро. Използвам L2E в настоящите проекти, но избягвам използването на LINQ към SQL, тъй като смятам, че ще бъде премахнат. - person SidC; 17.02.2010