2016-08-03 73 views
1

我正在使用實體框架與MySQL。我必須在其中一個查詢中使用Intersect,但會引發錯誤「指定的方法不受支持。」「。任何人都可以提出替代方案,而不是將數據提取到內存並在其上應用相交。相交或除LINQ中的方法不能在MYSQL中工作

public List<share> GetFeed(List<long> UserRules, List<long> ListedShares, string AuthorID) 
{ 
    List<share> listshare = DbContext 
     .shares 
     .Where(x => UserRules.Intersect(x.share_rules.Select(y => y.rule_id)).Any()) 
     .ToList(); 
    return listshare; 
} 
+0

你能爲我們提供一個原始的MySQL查詢嗎? –

+0

調試時無法獲得原始sql查詢:「準備命令定義時發生錯誤,請參閱內部異常以瞭解詳細信息。」 –

+0

您需要掌握您試圖運行的實際MySQL查詢。如果你不能寫,你可能會認爲你不知道它。無論如何,如果您可以向我們顯示一個查詢和一些數據,我們可能可以使用連接或where子句來處理相交。 –

回答

1

不支持指定的方法。意味着EntityFramework無法將其轉換爲SQL查詢。實際上,在大多數情況下,可以將其轉換爲支持的Contains。你應該改變你的方法來匹配:

public List<share> GetFeed(List<long> UserRules, List<long> ListedShares, string AuthorID) 
{ 
    List<share> listshare = DbContext 
     .shares 
     .Where(x => x.share_rules.Any(y => UserRules.Contains(y.rule_id))) 
     .ToList(); 
    return listshare; 
}