【发布时间】:2012-04-06 01:58:37
【问题描述】:
我正在开展一个项目,我们需要针对该项目创建复杂的查询 WCF 服务。
该服务在后端使用 linq to sql,并将查询投射到数据传输对象,如下所示:
dbContext.GetQueryable() .Where(x => x.Id == formatId) .Select(x => FormatHelper.PopulateMSFormat(x)) .ToList();我想做的是在客户端指定一个查询,假设我想查询具有某个属性或其中几个属性的所有格式。 这种风格的东西:
var assets = client.QueryForAssets().Where(x => (x.name == "Test" || x == "Arne") && x.doe == "john");我知道我无法通过 WCF 返回 IQueryable,但可以使用 OData 服务完成类似的操作。问题是我必须返回 DTO,而 OData 让我很容易绑定到 L2S-datacontext,它公开了我的数据模型而不是 DTO。
那么有没有一种好的方法可以对 DTO 的查询进行序列化,从而有效地传播到 l2s 层?
我曾考虑编写自己的查询语言,但我发现构建正确的表达式树作为 l2s 的谓词非常困难,因为没有从 DTO 到 linq 类的映射。
【问题讨论】: