2

私は自分のアプリケーションにエンティティフレームワークを使用しています。残念ながら、エンティティフレームワークでこのような式を作成することはできません。

List<MyUser> users = (from user in database.MyUsers
                      join app in database.MyApplications 
                          on user.ApplicationId equals app.Id
                      where app.Name == this._applicationName 
                          && user.MyRoles.Contains(existingRole)
                      select user).ToList();

これに対する他のアプローチ。データベースやモデルを変更したくありません。私の場合、MyUserとMyRoleの関係は、接着剤テーブルを使用した多対多です。

MyUserクラスの宣言方法は次のとおりです。

public partial class MyUser
{
    public MyUser()
    {
        this.MyApiTokens = new HashSet<MyApiToken>();
        this.MyLandingPages = new HashSet<MyLandingPage>();
        this.MyPresentations = new HashSet<MyPresentation>();
        this.MySlides = new HashSet<MySlide>();
        this.MyUserSettings = new HashSet<MyUserSetting>();
        this.MyRoles = new HashSet<MyRole>();
    }

    public System.Guid Id { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public string EmailAddress { get; set; }
    public int ApplicationId { get; set; }
    public System.DateTime CreateDate { get; set; }
    public System.DateTime LastActivityDate { get; set; }
    public System.DateTime LastLockoutDate { get; set; }
    public System.DateTime LastLoginDate { get; set; }
    public System.DateTime LastPasswordChangedDate { get; set; }
    public string PasswordQuestion { get; set; }
    public string PasswordAnswer { get; set; }
    public string Comment { get; set; }
    public bool IsLocked { get; set; }
    public bool IsApproved { get; set; }

    public virtual ICollection<MyApiToken> MyApiTokens { get; set; }
    public virtual MyApplication MyApplication { get; set; }
    public virtual ICollection<MyLandingPage> MyLandingPages { get; set; }
    public virtual ICollection<MyPresentation> MyPresentations { get; set; }
    public virtual ICollection<MySlide> MySlides { get; set; }
    public virtual ICollection<MyUserSetting> MyUserSettings { get; set; }
    public virtual ICollection<MyRole> MyRoles { get; set; }
}
4

1 に答える 1

3

MyRolesがエンティティモデルの関連付けプロパティである(つまり、テーブルにマップされている)と仮定すると、ロールオブジェクトの主キーで一致を明示的にすることができます。例えば:

user.MyRoles.Any(r => r.RoleId == existingRole.RoleId)

ただし、質問には正確な答えを出すのに十分な情報がありません。

于 2013-01-08T19:37:42.790 に答える