J'ai un tas de méthodes Linq to Entity qui avaient la même instruction select, donc je pensais que je serais intelligent et séparer cela dans sa propre méthode pour réduire la redondance ... mais quand j'ai essayé d'exécuter le code, j'ai eu l'erreur suivante ...Quelles sont les causes de l'erreur Linq: Cette méthode ne peut pas être traduite en une expression de magasin?
this method cannot be translated into a store expression
Voici la méthode que je crée ...
public User GetUser(DbUser user, long uid)
{
return new User
{
Uid = user.uid,
FirstName = user.first_name,
LastName = user.last_name
};
}
Et vous appelle dans une méthode comme ça ...
public User GetUser(long uid)
{
using (var entities = new myEntities()) {
return
entities.DbUsers.Where(x => x.uid == uid && x.account_status == (short)AccountStatus.Active).
Select(x => GetUser(x, uid)).FirstOrDefault();
}
}
MISE À JOUR: voici le code qui fonctionne en ligne
public User GetUser(long uid, long uid_user)
{
using (var entities = new myEntities())
{
var q = from u in entities.DbUsers
where u.uid == uid_user
select new User
{
Uid = u.uid,
FirstName = u.first_name,
LastName = u.last_name,
BigPicUrl = u.pic_big,
Birthday = u.birthday,
SmallPicUrl = u.pic_small,
SquarePicUrl = u.pic_square,
Locale = u.locale.Trim(),
IsFavorite = u.FavoriteFriends1.Any(x => x.uid == uid),
FavoriteFriendCount = u.FavoriteFriends.Count,
LastWishlistUpdate = u.WishListItems.OrderByDescending(x => x.added).FirstOrDefault().added,
Sex = (UserSex)u.sex
};
var user = q.FirstOrDefault();
user.DaysUntilBirthday = user.Birthday.DaysUntilBirthday();
return user;
}
}
J'ai essayé cette technique et elle échoue toujours –
Pourquoi avez-vous DbUser et utilisateur quand même? Les entités d'EF ne sont-elles pas supposées être vos entités de domaine ??? Il semble que l'utilisateur est une version simplifiée de DbUser pourquoi ne pas opérer sur DBUsers? –
Je devine que DbUser est le EF POCO et User est son objet métier personnalisé. Pourtant, je préfère mapper directement à mon POCO personnalisé. Laisse tomber l'homme du milieu. – RPM1984