2012-05-08 3 views
1

У меня есть стандартная парадигма социальных сетей, в которой пользователь имеет коллекцию друзей, которые также являются пользователями.Entity Framework Многие из многих присоединяются к запросу

Я использую Entity Framwork Code First, и мой друг отношение определяется следующим образом:

modelBuilder.Entity<User>() 
.HasMany(u => u.Friends) 
.WithMany() 
.Map(m => 
    { 
     m.ToTable("Friendships"); 
     m.MapLeftKey("UserId"); 
     m.MapRightKey("FriendId"); 
    }); 

То, что я хочу сделать, это найти мои пользователь таблицу возвращающейся все пользователь с индикатором того, каждый возвращается пользователь дружит с текущим пользователем. Чтобы быть ясным, я хочу вернуть пользователей, которые являются друзьями и пользователями, которые не являются друзьями, но также с логическим указанием, является ли каждый пользователь другом. Я знаю, как это сделать в TSQL - это основное левое внешнее соединение.

Я видел примеры того, как сделать левое соединение в LINQ, но все примеры, которые я видел, соединяются с отображенным типом. В столбце «Мои друзья» не указан тип Mapped.

Как это сделать в EntityFramework?

ответ

1
var list = context.Users 
    .Where(u => u.Age >= 20) // sample condition, if you want ALL remove the line 
    .Select(u => new 
    { 
     User = u, 
     FriendOfCurrentUser = u.Friends.Any(f => f.UserId == currentUserId) 
    }) 
    .ToList(); 

Результат - это список анонимных объектов, содержащих пользователя, и индикатор логической дружбы. Вы также можете создать вспомогательный класс UserWithFriendship и проецировать на него (Select(u => new UserWithFriendship { ... }) вместо анонимного типа.

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