Как мне переписать это, чтобы быть более LINQy? - PullRequest
2 голосов
/ 22 июня 2011

У меня есть этот набор данных здесь.У событий есть свойство EventGroups, которое имеет тип List<Groups>

List<Events> e;
List<Groups> g;

// Get the data from the database using dapper
using( var con = DataAccessMaster.GetOpenConnection( ) ) {
    using( var multi = con.QueryMultiple( sprocname, new { StartDate = fromDate, EndDate = toDate }, commandType:CommandType.StoredProcedure ) ) {
        e = multi.Read<Events>( ).ToList( );
        g = multi.Read<Groups>().ToList();
    }
}

// Only put the groups that belong to one another within the related event so that when we goto bind it will be painless
foreach ( var ev in e ) {
    ev.EventGroups = new List<Groups>();
    foreach ( Groups group in g.Where( Groups => ( ev.EventID == Groups.EventID ) ) ) {
        ev.EventGroups.Add( group );
    }
}

return e;

Мне кажется, что последний блок можно переписать более аккуратно, чем он есть.Что я могу сделать, чтобы сделать это чище?

Ответы [ 3 ]

4 голосов
/ 22 июня 2011

Вы можете использовать метод расширения Enumerable.ToList , чтобы превратить IEnumerable в новый список :

foreach (var ev in e)
{
    ev.EventGroups = g.Where(groups => ev.EventID == groups.EventID)
                      .ToList();
}
1 голос
/ 22 июня 2011

Это, например,

ev.EventGroups = g.Where( Groups => ( ev.EventID == Groups.EventID )).ToList();

приходит на ум.

1 голос
/ 22 июня 2011

Вы можете свернуть внутренний цикл с помощью ToList().

foreach ( var ev in e ) {
    ev.EventGroups = g.Where( Groups => ( ev.EventID == Groups.EventID ) ).ToList();
}

Внешний цикл уже настолько LINQy, насколько это возможно, потому что это побочный цикл, а не LINQy.

...