Est-il possible d'utiliser Select (l => nouveau {}) avec SelectMany dans EntityFramework

voix
2

J'essaie quelque chose que je pas vraiment sûr, mais je veux demander ici si c'est possible.

Est-il pu faire?

public IQueryable<Info> GetInfo(int count, byte languageId)
        {
            return db.Info.SelectMany(i => i.LanguageInfo)
                              .Where(l => l.Language.id == languageId)
                              .Select(l => new Info {   AddDate = l.Info.AddDate,
                                                        Description = l.Description,
                                                        EntityKey = l.Info.EntityKey,
                                                        id = l.Info.id,
                                                        Title = l.Title,
                                                        ViewCount = l.Info.ViewCount }
                                                        )
                              .OrderByDescending(i => i.id)
                              .Take(count);
        }

Lorsque cette méthode est exécutée i eu une erreur

ne peuvent pas être construites type entité ou complexe « GuideModel.Info » dans un LINQ pour interroger des entités.

Est-ce que cela veut dire « pas possible »?

Je vous remercie

Créé 27/08/2009 à 02:05
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
3

L'erreur indique essentiellement que le Entity Framework ne sait pas comment créer un objet Info, car il n'est pas lié à un objet de table. (En d' autres termes, l' Selectappel de la IQueryablene peut pas être traduit en SQL équivalent.) Vous pouvez effectuer la Selectprojection sur le client via:

public IQueryable<Info> GetInfo(int count, byte languageId)
{
    return db.Info.SelectMany(i => i.LanguageInfo)
                      .Where(l => l.Language.id == languageId)
                      .Take(count)
                      .AsEnumerable()
                      .Select(l => new Info {   AddDate = l.Info.AddDate,
                                                Description = l.Description,
                                                EntityKey = l.Info.EntityKey,
                                                id = l.Info.id,
                                                Title = l.Title,
                                                ViewCount = l.Info.ViewCount }
                                                )
                      .OrderByDescending(i => i.id);
}
Créé 27/08/2009 à 14:09
source utilisateur

voix
2

Il est possible d'utiliser Select(l => new ...), mais pas avec un type d' entité. Vous devez utiliser un type anonyme ou un type POCO avec un constructeur parameterless. Les types d' entités sont « spéciales » en raison de la façon dont ils interagissent avec le ObjectContext. Vous pouvez les sélectionner, mais pas de nouveaux - les dans une requête.

Créé 27/08/2009 à 14:06
source utilisateur

voix
0

Le code ci-dessous a fonctionné pour moi. Ici « searchTerm » est un type complexe. Merci Jason :)

var lstSynonym = TechContext.TermSynonyms
                .Where(p => p.Name.StartsWith(startLetter))
                .AsEnumerable()
                .Select(u => new SearchTerm
                                 {
                                     ContentId = u.ContentId,
                                     Title = u.Name,
                                     Url = u.Url
                                 });
Créé 19/04/2011 à 11:10
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more