我想构建一些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),但得到了一些无效的操作异常......
答案 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