Запросы с условными параметрами - PullRequest
0 голосов
/ 17 апреля 2009

До версии 2.1 я мог написать такой код (используя AddWhere):

Query q = new Query(Search.Schema);
q.BuildSelectCommand();
if (!String.IsNullOrEmpty(barcode)) q.AddWhere("Barcode", Comparison.Like, "%" +     barcode.Trim() + "%");
if (!String.IsNullOrEmpty(fromDate)) q.AddWhere("FromDate", Comparison.GreaterOrEquals, fromDate);
if (!String.IsNullOrEmpty(toDate)) q.AddWhere("ToDate", Comparison.LessOrEquals, fromDate);
if (!String.IsNullOrEmpty(department)) q.AddWhere("DeptNo", Comparison.Like, "%" + department.Trim() + "%");
if (!String.IsNullOrEmpty(series)) q.AddWhere("SeriesNo", Comparison.Like, "%" + series.Trim() + "%");
if (!String.IsNullOrEmpty(altcode)) q.AddWhere("AltCode", Comparison.Like, "%" + altcode.Trim() + "%");

Это позволило мне создавать красивые формы поиска и выполнять поиск только по переменным, которые пользователи вводили в форму. Я пытаюсь воспроизвести эту функцию простым способом с помощью 2.1 и не могу понять это. У кого-нибудь есть предложения?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2009

Решение, которое я придумал:

SqlQuery q = new Select("syKey").From<Search>().Where("1").IsEqualTo("1");
if (!String.IsNullOrEmpty(barcode)) q.And("Barcode").Like("%" + barcode.Trim() + "%");
if (!String.IsNullOrEmpty(fromDate)) q.And("FromDate").IsGreaterThanOrEqualTo(fromDate);
if (!String.IsNullOrEmpty(toDate)) q.And("ToDate").IsLessThanOrEqualTo(fromDate);
if (!String.IsNullOrEmpty(department)) q.And("DeptNo").Like("%" + department.Trim() + "%");
if (!String.IsNullOrEmpty(series)) q.And("SeriesNo").Like("%" + series.Trim() + "%");
if (!String.IsNullOrEmpty(altcode)) q.And("AltCode").Like("%" + altcode.Trim() + "%");

Обратите внимание, где по умолчанию ("1"). IsEqualTo ("1") Я могу динамически добавлять «И» в запрос, чтобы он работал. Было бы неплохо, если бы AddWhere вернули обратно, чтобы вы могли продолжать накладывать команды WHERE друг на друга.

0 голосов
/ 17 апреля 2009
IDataReader rdr=new Select().From<Search>().Where("barcode").Like(..)
.And("FromDate").GreaterThan(..)
.And("ToDate").LessOrEqualTo(..)
.And("DeptNo").Like()
...
.ExecuteReader();

http://blog.wekeroad.com/2008/01/10/subsonic-version-21-pakala-preview-the-new-query-tool/

Теперь, если вы любите приключения, вы можете использовать 3.0 (который находится в разработке) и вы можете использовать Linq для этого:

http://code.google.com/p/subsonicthree/

Я рад помочь здесь ...

...