2009-11-10 3 views
18

我々はタスクと呼ばれるクラスを持っている:エンティティへのLINQにパラメータとしてFUNCを渡すと「内部.NET Frameworkデータプロバイダーエラー1025」エラー

public partial class Task : EntityObject 
{ 
    public EntityCollection<TaskUser> TaskUsers { get {...} set{...} } 
} 

それは、これに接続しているユーザが含まれていTaskUsersと呼ばれるナビゲーションプロパティを持っていますタスク:

public partial class TaskUser : EntityObject 
{ 
    public User User { get {...} set { } } 
} 

すべてのTaskUserオブジェクトには、Userオブジェクトがあります。

IQueryable<Task> tasksとなります。 ID = 1のユーザーに割り当てられたタスクを検索します。

tasks.Where(t => t.TaskUsers.Any(a => a.User.ID == 1)) 

すべて正常に動作します。使用する場合

Func<TaskUser, bool> function = a => a.User.ID == 1; 
return tasks.Where(t => t.TaskUsers.Any(function)); 

'Internal .NET Framework Data Provider error 1025'エラーが発生します。どうして? Expressionクラスを使用してもっと複雑なフィルタを作成したいのですが、単純なFuncを渡すことができない場合、これはできません。私は何をすべきか?

EDIT

たぶん

Func<TaskUser, bool> function = a => a.User.ID == 1; 
return tasks.Where(t => t.TaskUsers.Any(function)); 

は動作しますが、

Expression<Func<TaskUser, bool>> expression = a => a.User.ID == 1; 
return tasks.Where(t => t.TaskUsers.AsQueryable().Any(expression)); 

作品はありません!それが私の必要なすべてです。

+0

ふむ、私はちょうど(http://stackoverflow.com/questions/11990158/internal- [同様の質問]の恵みを掲載しましたnet-framework-data-provider-error-1025)をご覧ください。賞金を手に入れたいですか? –

+0

実際、あなたのように 'Func'ではなく' Expression'を使ってみましたが、私は**できませんでした**。他のアイデア? –

答えて

25

EFは、関数ではなく式だけを変換できます。

それはこの翻訳することができます。すなわち:

Expression<Func<TaskUser,bool>> 

ではなく、この:(擬似コードで)表現をマージする方法については

Func<TaskUser,bool> 

Expression<Func<TaskUser, bool>> expression = a => a.User.ID == 1; 
return tasks.Where(t => t.TaskUsers.Any(expression)); 

おそらくありますがそれを助けることができるいくつかの表現者達。その特定の問題に焦点を当て

私がフォロー質問を示唆

はアレックス

+12

guruの助けがなければ:return tasks.Where(t => t.TaskUsers.AsQueryable()。Any(expression)); – LukLed

+0

涼しい、いつも不思議。 –

関連する問題