Ne AutoMapper soutien Linq?

Je suis très intéressé par Linq to SQL avec Lazy caractéristique de charge. Et dans mon projet j'ai utilisé AutoMapper à la carte DB Modèle de Modèle de Domaine (à partir de DB_RoleInfo à DO_RoleInfo). Dans mon référentiel de code comme ci-dessous:

    public DO_RoleInfo SelectByKey(Guid Key)
    {
        return SelectAll().Where(x => x.Id == Key).SingleOrDefault();
    }

    public IQueryable<DO_RoleInfo> SelectAll()
    {
        Mapper.CreateMap<DB_RoleInfo, DO_RoleInfo>();
        return from role in _ctx.DB_RoleInfo
               select Mapper.Map<DB_RoleInfo, DO_RoleInfo>(role);
    }

SelectAll méthode est de fonctionner bien, mais quand je l'appelle SelectByKey, j'obtiens l'erreur:

Méthode “RealMVC.Les données.DO_RoleInfo MapDB_RoleInfo,DO_RoleInfo” pourrait ne pas se traduire par SQL.

Est-ce que Automapper ne prend pas en charge Linq complètement?

Au lieu de Automapper, j'ai essayé le manuel de cartographie de code ci-dessous:

public IQueryable<DO_RoleInfo> SelectAll()
{
    return from role in _ctx.DB_RoleInfo 
    select new DO_RoleInfo 
    {
        Id = role.id,
        name = role.name,
        code = role.code
    };
}

Cette méthode fonctionne de la manière que je veux.

  • Juste une remarque sur votre mise à jour en plus de ma réponse: La deuxième version fonctionne parce que Linq to SQL sait déjà que vous avez fait irréversible de projection; la SelectByKey est en fait tout simplement à l'aide de Linq to Objects. Si vous examiner la requête générée, je pense que vous trouverez que c'est encore la sélection de l'ensemble des entités de la base de données, ce qui est équivalent à l'utilisation de ToList() et puis filtrage de la liste résultante.
  • Ce n'est pas que AutoMapper prend en charge LINQ. C'est que LINQ to SQL ne prend pas en charge AutoMapper. Le LINQ to SQL de la requête fournisseur de recherche à l'expression de l'arbre pour déterminer la façon de générer la requête SQL. Quand il arrive à le Mappeur.Morceau de carte, il n'a aucune idée de la façon de générer le SQL.
InformationsquelleAutor Sam Zhou | 2010-02-06