1

Entity SQL /eSQL に変換する必要がある次の LINQ クエリがあります)。

return (ObjectQuery<User>) from user in Users
   where !user.Roles.Any(r => r.AnIntegerProperty < 0)
   select user;

User.Roles は、ロールに対する n:m 関係へのナビゲーション プロパティであり、逆に Role.Users ナビゲーション プロパティもあります。モデルで使用できる User_Roles または Roles_User エンティティがなく、これらを追加できません。

ObjectQuery がビルドされている場合、後で .OrderBy("it." + propertyname) (別のソースから取得され、それも変更できません) を追加する必要があるため、ここで LINQ ステートメントを使用することもできません。リンク付き。

では、これを eSQL に変換するにはどうすればよいでしょうか。また、適切な eSQL サンプルはどこにありますか? 私は今まで一日中検索しましたが、eSQL リファレンスはお粗末であり、Web には使用可能な例がないことを認めなければなりません。

4

4 に答える 4

1

解決策が見つからない場合は、これが機能します

SELECT VALUE u FROM YourDataContextEntities.Users AS u WHERE NOT EXISTS(SELECT r FROM u.Roles AS r WHERE r.AnyIntegerProperty < 0)
于 2010-07-25T02:56:40.603 に答える
0

ここでは動的linqライブラリが解決策になると思います:

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

動的なプロパティ名を使用してフィルター式を作成できるため、翻訳を行う必要はありません。

于 2010-03-17T11:30:50.987 に答える
0

ユーザーとロールで利用できるものの詳細を知らずに答えを見つけることは困難です。ただし、あなたが言ったことを考えると、次のように機能します。

return (ObjectQuery<User>) from user in Users
                            where !(from role in dataContext.Roles
                                    where role.AnIntegerProperty < 0
                                    select role.UserId).Contains(user.UserId);
于 2010-04-01T04:22:31.753 に答える
0

私はそれを次のように書きます

contexte.Users.Where("NOT EXISTS (SELECT VALUE r FROM it.Roles AS r WHERE  r.AnIntegerProperty < 0)")

テストされていませんが、私はすでに似たようなことを試したので、これはうまくいくはずです。

于 2010-04-01T03:09:41.163 に答える