2011-12-05 41 views
1

是否可以從LinqToSql(或EF)查詢返回多個實體(查詢位於方法內部),以便結果仍可組合?從LinqToSQL(或EF)返回多個實體

事情是這樣的:

public IQueryable<KeyValuePair<Customer, Product>> GetCustomerEntities() 
{ 
    return 
    (
     from customer in this.Context.Customers 
       join 
       product in this.Context.Products on customer.ID equals product.CustomerID  
     select new KeyValuePair<Customer, Product>(customer, product) 
    ); 
} 

然後我想用這個方法的結果,以進一步構成,如查詢:

this.GetCustomerEntities().Where(e => e.Key.Name == "my customer") 

上述編譯方法,但它不能被執行通過LinqToSql,因爲它不能將KeyValuePair轉換爲SQL,這是預期的行爲。

是否有可能以某種方式實現這一點?

回答

1

這裏的問題是,運行時無法看到將customer傳入構造函數參數與查看e.Key是一回事,因爲這兩件事情顯然不相同。你可以嘗試創建自己的POCO類型與getter和setter,即

select new CustomerProduct { Customer = customer, Product = product } 

和使用而不是KeyValuePair<Customer,Product>

在單一方法中,匿名類型是明顯的選擇。

+0

謝謝,它的工作原理!我可以在不執行SQL的情況下編寫查詢。 – SzilardD

0
this.GetCustomerEntities().ToList().Where(e => e.Key.Name == "my customer") 

這應該工作。這不是最有效的可能,但它至少會運行。一旦你枚舉出來(用ToList()),可查詢將在SQL服務器上執行,並且任何進一步的操作將在枚舉中進行。這使您可以自由使用KeyValuePair類。

如果您想專門進一步編寫查詢來利用SQL,那麼您應該參數化您的函數,並且首先從數據庫中獲取所需的行。