Linq选择tablemapping(实体框架)

时间:2016-05-30 13:59:02

标签: c# asp.net-mvc entity-framework linq asp.net-mvc-4

我有以下表格

**Track Table**
+---------------+---------------+--------------------+
| TrackId        | TrackName    |       Path         |
+===============+===============+====================+
| 1             | jb            | http://domain/1.mp3|
+---------------+---------------+--------------------+
| 2             | remix         | http://domain/2.mp3|
+---------------+---------------+--------------------+

**Favorite Table**
    +---------------+---------------+--------------------+
    | favoriteId    | ProfileId     |       TrackId      |
    +===============+===============+====================+
    | 10            | 2130          | 1                  |
    +---------------+---------------+--------------------+
    | 11            | 2132          | 2                  |
    +---------------+---------------+--------------------+

我需要在模型中选择轨道,我必须在其中包含布尔字段IsFavorite。 现在我的逻辑如下:

1.Select Tracks
2.Select all favorites by profile
3.Iterate to both list and fill field "IsFavorite"

有没有更好的方法可以解决这个问题?

以下是我当前的逻辑代码

Var ActiveTracks = jukeboxTrackService.GetActiveTracks();
var UserFavorites = jukeboxTrackService.GetFavoritesByProfile(ProfileId);
foreach (var item in ActiveTracks )
{
    foreach (var fav in UserFavorites)
    {
        if (item.JukeBoxTrackId == fav.TrackId)
        {
            item.IsFavorite = true;
        }
    }
}

return ActiveTracks ;

提前致谢。

1 个答案:

答案 0 :(得分:2)

(from tr in ActiveTracks 
join usrfav in UserFavorites on tr.TrackId equals usr.TrackId into UsrTracks
from usrtr in  UsrTracks.DefaultIfEmpty()
select new Track
{ 
  IsFavorite = (usrfav.TrackId == null) ? false : true 
}