我正在一个项目,我们需要创建一个WCF服务 复杂查询。查询DTO对象通过WCF与LINQ到SQL后端
该服务使用LINQ在后端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类的映射。
这听起来像一个很好的解决方案,但我不能得到它的工作。我怀疑它与我使用L2S而不是EF – 2012-03-21 15:22:22
的事实有关,发现至少有两个问题。我无法使用帮助器方法,并且由于上下文被封装在使用中,因此将在查询集合时处理它。 – 2012-03-21 16:01:32
使用L2S或EF无关紧要。您可以汇集来自任何来源的数据。由于OData服务对象是按照“每个请求”创建的,所以使用'using'语句是正确的方式,因为DataModel类实例将随请求一起创建和销毁。 – 2012-03-21 16:49:46