Мне нужно иметь возможность разделить мои операторы выбора для EF

У меня есть около 10 вызовов с одним и тем же оператором выбора. Это больше, чем просто FirstOrDefault, внутри него есть некоторая логика БД. Я не видел хорошего способа извлечь это в отдельный метод или оператор. Я приблизился к чему-то вроде этого:

static readonly Expression<Func<DbUser, User>> GetUser = (g) => new User {
    Uid = g.uid,
    FirstName = g.first_name,
    LastName = g.last_name,
    BigPicUrl = g.pic_big,
    Birthday = g.birthday,
    SmallPicUrl = g.pic_small,
    SquarePicUrl = g.pic_square,
    Locale = g.locale.Trim(),
    //IsFavorite = g.FavoriteFriends1.Any(x=>x.uid==uid),
    FavoriteFriendCount = g.FavoriteFriends.Count,
    LastWishlistUpdate = g.WishListItems.OrderByDescending( x=>x.added ).FirstOrDefault().added
};

Проблема с этим методом заключается в том, что я не могу передать дополнительные параметры, такие как тот, который вы видите IsFavorite. Мне нужно иметь возможность делать такие вещи, но при этом иметь возможность использовать переменные для построения операторов запроса.


person Rod Johnson    schedule 22.09.2010    source источник


Ответы (1)


Легкий. Сделайте функцию:

static readonly Expression<Func<DbUser, User>> GetUser(int uid)
{ 
    return (g) => new User 
                  {
                      Uid = g.uid,
                      FirstName = g.first_name,
                      LastName = g.last_name,
                      BigPicUrl = g.pic_big,
                      Birthday = g.birthday,
                      SmallPicUrl = g.pic_small,
                      SquarePicUrl = g.pic_square,
                      Locale = g.locale.Trim(),
                      IsFavorite = g.FavoriteFriends1.Any(x=>x.uid==uid),
                      FavoriteFriendCount = g.FavoriteFriends.Count,
                      LastWishlistUpdate = g.WishListItems
                                            .OrderByDescending(x=>x.added)
                                            .FirstOrDefault().added
                  };
}
person Craig Stuntz    schedule 22.09.2010