是否可以从 WCF 服务获取 LINQ 投影

本文关键字:获取 LINQ 投影 服务 WCF 是否 | 更新日期: 2023-09-27 17:56:41

Automapper有一个非常好的扩展来获取投影。
在我们应用程序的 BL 中,我们可以定义这样的方法:

IEnumerable<TEntityProjection> GetProjections()
{
    return _context.EntitiesSet.Project().To<TEntityProjection>();
}

这有助于BL保持非常简单。对于每个投影变体,我们不需要许多不同的方法。
但。。。WCF 服务不支持开放泛型。
所以我正在寻找允许服务客户端仅获取实体所需属性的解决方案。

是否可以从 WCF 服务获取 LINQ 投影

可能的解决方案是 Linq over WCF(基于 BLToolkit)。在后台,linq 查询解析为 SqlQuery (SQL AST),序列化并发送到 WCF LINQService。该服务为数据库(SQl Server,Oracle,MySql等)创建一个sql查询,执行它并返回数据。支持匿名类型。

查询示例:

var client = new DataModel();
var q = from p in client.Person
        select new   
{
      p.PersonID,
      p.FirstName,
      p.MiddleName,
      p.LastName,
      p.Gender
};
foreach (var p in q)
  Console.WriteLine(p);

更多信息: http://bltoolkit.net/Doc.LinqDataContext.ashx

样品:https://github.com/igor-tkachev/bltoolkit/blob/master/Demo/Linq/OverWCF/Program.cs

这不会以您尝试的方式工作。

如果需要接收端的特定属性,可以:

  • 创建单独的方法,其中每个方法公开每个实体的特定预定义属性集
  • 创建采用"属性列表"参数(可能是字符串数组)并返回带有 XML 或 JSON 的字符串的方法,然后需要在客户端上进行一些程序集
  • 只需忽略客户端上不需要的属性

我想这取决于您的具体情况,哪个是最好的。