14

Cómo concateno cadenas en Entity Framework 4 Tengo datos de una columna y quiero guardar como una cadena una cadena separada por comas como "value1, value2, value3" ¿Hay un método o un operador que haga esto en EF4? Ejemplo: supongamos que tengo dos columnas Fruit y Farms con los siguientes valores:¿Cómo concateno cadenas en Entity Framework Query?

  • Manzanas
  • Plátanos
  • Fresas

Si me gusta este

 
var dataSource = this.context 
    .Farms 
    .Select(f => new 
     { 
      f.Id, 
      Fruits = string.Join(", ", f.Fruits) 
     }); 

Claro que obtendré este error

LINQ to Entities no reconoce el método 'System.String Join (System.String, System.Collections.Generic.IEnumerable`1 [System.String])' método, y este método no se puede traducir a una tienda expresión.

¿Hay alguna solución a esto?

Respuesta

13

Tiene que ejecutar la consulta antes de proyectar. De lo contrario, EF intentará traducir el método Join al SQL (y obviamente falla).

var results = this.context 
        .Farms 
        .ToList() 
        .Select(f => new 
         { 
          f.Id, 
          Fruits = string.Join(", ", f.Fruits) 
         }); 
+1

La cuestión es que quiero la fuente de datos es IQueryable para obligar a éste a la red a continuación, lo hará de manera que el propio servidor de localización . –

+2

Hacer paginación antes de la concatenación, entonces. –

1

Tomó respuesta @Yakimych y el pensamiento proporcionaría mío si alguien necesitaba:

using (myDBEntities db = new myDBEntities()) 
      { 
       var results = db.Table 
        .ToList() 
        .Where(x => x.LastName.StartsWith("K")) 
        .Select(
        x => new 
        { 
         x.ID, 
         Name = x.LastName + ", " + x.FirstName 
        } 
        ); 

       lstCoaches.DataValueField = "ID"; 
       lstCoaches.DataTextField = "Name"; 
       lstCoaches.DataSource = results; 
       lstCoaches.DataBind(); 
       ListItem item = new ListItem 
       { 
        Value = "0", 
        Text = "-- Make a Selection --" 
       }; 
       lstCoaches.Items.Insert(0,item); 
       lstCoaches.SelectedIndex = 0; 
      } 
Cuestiones relacionadas