2010-09-06 2 views
0

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

Что-то вроде этого:

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), но получил некоторые недопустимые операции. .....

ответ

0

Не уверен, что он подойдет вашей ситуации, но вы можете использовать деревья выражений для создания динамических запросов. Существует good tutorial here

+0

Я пошел по пути построения запроса Dataservice с построенной строкой и вместо метода qry.AddQueryOption («$ filter»). Но деревья выражений - лучший способ, так как на данный момент быстрее перейти к опции $ filter. –

1

Я не уверен, что полностью понимаю ваш вопрос, но иногда я написал код для создания запросов 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

Это хорошо работает, но не в том случае, если результирующий запрос должен быть длинной комбинацией и и/или, которые должны быть созданы во время выполнения. –

Смежные вопросы