是否有可能从WCF服务获得LINQ预测?

时间:2013-01-29 11:23:09

标签: c# wcf linq entity-framework automapper-2

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

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

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

2 个答案:

答案 0 :(得分:2)

可能的解决方案是Linq over WCF(基于BLToolkit)。 在引擎盖下,linq查询解析为SqlQuery(SQL AST),序列化并发送到WCF LINQService。该服务为DB(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

答案 1 :(得分:1)

这不会影响您尝试的方式。

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

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

我认为这取决于你最好的案例细节。