簡體   English   中英

是否可以從WCF服務獲取LINQ投影?

[英]Is it possible to get LINQ projections from WCF service?

Automapper有一個非常不錯的擴展來獲取投影。
在我們應用程序的BL中,我們可以定義如下方法:

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

這有助於BL保持非常簡單。 對於每個投影變體,我們不需要許多不同的方法。
但是... WCF服務不支持開放的泛型。
因此,我正在尋找一種解決方案,該方案允許服務客戶端僅獲取所需的實體屬性。

可能的解決方案是基於WCF的Linq(基於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

這將無法以您嘗試的方式起作用。

如果在接收端需要特定的屬性,則可以:

  • 創建單獨的方法,其中每個方法公開每個實體的一組特定的預定義屬性
  • 創建帶有“屬性列表”參數(可能為字符串數組)並返回帶有XML或JSON的字符串的方法,然后這些方法需要在客戶端進行一些匯編
  • 只需忽略客戶端上不需要的屬性

我想這取決於您的具體情況,這是最好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM