如何动态构建WCF查询?

时间:2010-09-06 11:21:58

标签: linq entity-framework entity wcf-data-services

我想构建一些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 个答案:

答案 0 :(得分: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

这样您就可以逐步构建查询。您可以这样做,因为延迟执行;在开始迭代结果之前,不会对数据源执行查询。

答案 1 :(得分:0)

不确定它是否适合您的情况,但您可以使用表达式树来构建动态查询。有一个good tutorial here