2015-08-02 1 views
2

Как применить ключевое слово SQL in в синтаксисе метода Entity Framework?Как применить ключевое слово SQL в синтаксисе метода Entity Framework?

Например, если я хочу написать запрос в Entity Framework

select roleName from Roles where rold_id in (select role_id from UserRoles where user_id = 1); 

Итак, как применить это в синтаксисе метода Entity Framework?

ответ

3

Внутренний запрос будет сделан отдельно:

var inner = UserRoles.Where(r => r.user_id == 1) 
        .Select(r => r.role_id); 

И тогда внешние будет использовать .Contains метод внутреннего.

var roleNames = Roles.Where(r => inner.Contains(r.role_id)) 
        .Select(r => r.roleName); 

Вы можете объединить все это в один запрос, но это самый надежный способ сделать это. Entity Framework использует отложенные запросы, поэтому он все равно будет делать это эффективно.

Edit: Просто для полноты пользы, вот версия одной строки:

var roleNames = Roles.Where(r => UserRoles 
         .Where(ur => ur.user_id == 1) 
         .Select(ur => ur.role_id) 
        .Contains(r.role_id)) 
        .Select(r => r.roleName); 

В скорлупе ореха, вместо того, чтобы это быть «B в множестве А», это больше похоже на «Set А содержит B ».

 Смежные вопросы

  • Нет связанных вопросов^_^