2009-07-06 38 views
1

我在Linq的許多帖子中找不到答案,所以在這裏。 我們有一個客戶端 - 服務器應用程序,其中客戶端完全不知道服務器端的實際DAL,這是偶然使用NHibernate實現的。這意味着,客戶端程序集沒有對NHibernate的引用,也沒有數據庫抽象。客戶端嚴格按照基於CSLA業務對象的實體的條款進行講話。使用Linq表達式將客戶端從DAL(服務器端)解耦出來

我想讓客戶端過濾顯示的實體。我的想法是讓客戶端構造一個Linq表達式,將其傳遞到服務器端,使用Linq將匹配表達式的數據提取到NHibernate並將其返回給客戶端。

我已經下載並編譯了NHibernate的Linq,但不幸的是我找不到從相應的NHibernateContext實例(aka服務器端)分離Linq表達式(又名客戶端)的例子。所有示例看起來都像

from c in db.Customers where ... 

即上下文(db.Customers)和表達式(where ...)在一個語句中。

是否可以將它們分開? 謝謝。

回答

0

這原來是很容易 - from c in db.Customers where linq-exp select c相當於db.Customers.Where(linq-exp)

我實際上需要這個作爲更廣泛問題的一部分 - 在客戶端指定linq表達式並使用它在服務器端獲取數據。我的帖子here更詳細地描述它。

0

看看這篇文章。您可以使用此概念傳遞查詢參數,然後動態構建您的查詢。

Linq query built in foreach loop always takes parameter value from last iteration

+0

嗨安德魯。我訪問了該鏈接。但是所有的樣本在一個linq語句中將上下文和表達式綁定在一起。我需要這樣的: var expr = GetExpressionFromUser(); // < - 在客戶端 var results = FetchByExpression (expr); // < - 在服務器端 – mark 2009-07-06 13:28:02