2 votes

LINQ to Entites : Création d'une chaîne de caractères délimitée par des virgules à partir d'une relation many-to-one

J'ai un couple de tables avec une relation many-to-one, et j'essaie de créer une chaîne qui contient une chaîne délimitée par des virgules comme suit.

Appelons-les State et City - la table City a un FK vers State.ID, et les States appartiennent aux Countries :

  var foo =  from item in _ctx.State
             where item.country_id == country_id
             select 
             new { id = item.ID, 
                 names = item.Name + ": " + String.Join(", ", 
                 (from c in _entity.City
                  where c.State.ID == item.ID 
                  select c.City_Name).ToArray())
             };
  return Json(foo.ToList());

Je cherche quelque chose comme :

[{ id = 3, names = "CA : A, B, C" }, { id = 5, noms = "OR : D, E" }, etc.

Avec la fonction String.Join (de ce question) là-dedans, j'obtiens :

LINQ to Entities ne reconnaît pas la méthode 'System.String Join(System.String, System.String[]) et cette méthode ne peut pas être traduite en une expression de magasin.

Y a-t-il un moyen de le faire ?

2voto

Craig Stuntz Points 95965

Vous devez diviser votre requête en deux parties : LINQ to Entities (contenu de la base de données) et LINQ to Objects (contenu de la base de données). String.Join et d'autres méthodes) :

var foo =  from item in _ctx.State
           where item.country_id == country_id
           select 
           new 
           { 
               id = item.ID, 
               names = item.Name,
               cities = from c in item.City select c.Name
           };
var bar = from item in foo.AsEnumerable
          select new
          {
              id = item.id, 
              names = item.names + ": " + String.Join(", ", item.cities.ToArray())
          };
return Json(bar.ToList());

Edit : C'était presque ça - j'ai dû changer la façon dont les villes étaient sélectionnées pour qu'il s'agisse d'un tableau de chaînes de caractères, et non d'objets City.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X