2012-10-29 63 views
2

我使用LINQ到實體,並正在此錯誤鮮明的方法並不支持

The method Distinct is not supported 

在這行代碼

var typeIds = _context.AttributeValues.Select(av => av.AttributeTypeId).Distinct(); 

這是爲什麼?

+0

您是否將SQL Server或其他數據庫與其自己的LINQ-to-Entities提供程序一起使用? – Slauma

+0

或者這是WCF數據服務嗎? –

+0

我正在使用SQL Server和WCF數據服務。 –

回答

0

一種解決方案是使用(服務器端)通過我的產品AdaptiveLINQ(www.adaptivelinq.com)中提供的QueryByCube方法來定義WCF數據服務。 此方法在聚合中轉換投影(由選擇運算符表示)。

你剛纔定義一個維度的立方體:AttributeTypeId

av => av.AttributeTypeId 

定義數據服務提供可查詢的集合:

yourDbContext.AttributeValues.QueryByCube(yourCube); 

現在你可以使用OData協議查詢您的服務:

http://.../myService.svc/AttributeValues?$select=AttributeTypeId 

或者,如果您使用C#客戶端:

serviceContext.AttributeValues.Select(x => x.AttributeTypeId); 

這相對於替代方法解決方案的優點提出爲J卡爾希是的區別在服務器端製成。

+0

只有在檢查完答案後,我才批准您對該問題的修改。爲了將來的參考,如果您可以提供一個有用的描述爲什麼需要標籤以及爲什麼它是有意義的總是更好。 –

1

根據MSDN,不支持使用OData服務的少數LINQ方法。以下是不支持的方法的部分列表。

  • 所有
  • 任何
  • 的毗連
  • DefaultIfEmpty
  • 鮮明
  • 除了
  • 相交
  • 聯盟
  • 郵編

對於不支持的操作的完整列表,請參閱here

然而,正如下面的語句應該在這種情況下,工作的解決方法。

var typeIds = _context.AttributeValues 
         .Select(av => av.AttributeTypeId) 
         .AsEnumerable() 
         .Distinct();