Как создать запрос WCF на лету? - PullRequest
0 голосов
/ 06 сентября 2010

Я хотел бы создать какой-нибудь linq или альтернативно, создать строку запроса на лету и передать ее службе данных WCF (с моделью данных Entity Framework).

Примерно так:

 public List<DocumentInformationRecord> SearchClientDocs(string clientCode,
            string clientName, string contactName, string groupCode, string groupName,
            string filename, string createdby, DateTime dateFrom, DateTime dateTo)
 {
   List<DocumentInformationRecord> results = new List<DocumentInformationRecord>();
   if(!string.IsNullOrEmpty(clientCode)) 
   //Add the client code clause...

и т.д ..

var qry = from c in context.DocumentInformationRecord.where(dynamicQuery);

            //Etc......

Есть идеи? Я попробовал построитель предикатов (http://www.albahari.com/nutshell/predicatebuilder.aspx), но получил некоторые недопустимые исключения операций .....

Ответы [ 2 ]

1 голос
/ 06 сентября 2010

Я не уверен, что полностью понимаю ваш вопрос, но я иногда писал код для построения запросов LINQ с различными частями в зависимости от ввода.Обычно это выглядит примерно так:

var qry = from item in someList
          select item;

if (nameFilter != null)
{
    qry = qry.Where(item => item.Name == nameFilter);
}

if (someOtherFilter != null)
{
    qry = qry.Where(item => item.SomeOtherStuff == someOtherFilter);
}
// and so on

Таким образом, вы можете построить запрос шаг за шагом.Вы можете сделать это из-за отложенного выполнения ;запрос не будет выполнен для источника данных, пока вы не начнете перебирать результат.

0 голосов
/ 06 сентября 2010

Не уверен, подходит ли это вашей ситуации, но вы можете использовать деревья выражений для построения динамических запросов.Здесь есть хороший учебник

...