3

簡単なクエリを書きたいのですが、いくつか問題があります。MからNまでの2つのテーブルがあります:

ユーザー -> イベント。

特定のイベントのすべてのユーザーを取得したい (このイベントを eventId で取得)。

public IQueryable<User> GetUsersByEventId(int eventId)
{
    IQueryable<User> query = this.Context.Users.AsQueryable();

    return query.Where(x => x.Events.SingleOrDefault(e => e.EventId == eventId)); ??
}

何かが足りないのですが、何がわからないのですか? 誰か助けてくれませんか? どうもありがとう !

4

2 に答える 2

7

私があなたのことを正しく理解していれば (あなたのモデルを追加すると役に立ちます)、あなたが望むと思いますAny

public IQueryable<User> GetUsersByEventId(int eventId)
{
      return Context.Users
                    .Where(u => u.Events.Any(e => e.EventId == eventId));
}

これにより、指定された ID に一致するイベントを持つすべてのユーザーが返されます。

注: 関係を正しく設定すると、これをイベントから直接取得できるはずです。

public class Event
{
    ...
    public virtual ICollection<User> Users { get; set; }
}

そのため、ID で Event を取得し、そのユーザー コレクションにアクセスします。

var evt = repo.GetEventById(id);
var users = evt.Users;
于 2013-08-24T14:23:03.170 に答える
1

Event モデル自体でそれを行うことをお勧めします。あなたが使用しているAFAIK EventUserおよびEventUsersmany2manyの標準的なものであるテーブル。

public class Event
{
    public int Id { get; set; }
    // ...
    public virtual ICollection<EventUsers> EventUsers { get; set; } // This is table that holds EventId, UserId (many2many)
    public IQueryable<User> Users { get { return this.EventUsers.Select(x => x.User); } } // Get all users that are in this event
}
于 2013-08-24T14:25:13.833 に答える