14

Wie verkette ich Zeichenfolgen in Entity Framework 4 Ich habe Daten aus einer Spalte und möchte als Zeichenfolge eine durch Komma getrennte Zeichenfolge wie "Wert1, Wert2, Wert3" speichern Gibt es eine Methode oder einen Operator tun dies in EF4? Beispiel: können sagen, dass ich zwei Spalten Fruit und Farms mit den folgenden Werten:Wie verkette ich Zeichenfolgen in Entity Framework Query?

  • Äpfel
  • Bananen
  • Erdbeeren

Wenn ich mag dieses

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

Sicher bekomme ich diesen Fehler

LINQ to Entities erkennt die Methode 'System.String Join (System.String, System.Collections.Generic.IEnumerable' 1 [System.String]) 'nicht, und diese Methode kann nicht in einen Informationsspeicher übersetzt werden Ausdruck.

Gibt es eine Lösung dafür?

Antwort

13

Sie müssen die Abfrage vor der Projektierung ausführen. Andernfalls versucht EF, die Join-Methode in SQL zu übersetzen (und offensichtlich fehlschlägt).

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

Die Frage ist möchte ich die Datasource IQueryable ist es an das Netz zu binden, dann wird es so der Server selbst Paging . –

+2

Führen Sie vor der Verkettung einen Paging-Vorgang durch. –

1

Nahm @Yakimych Antwort und dachte würde mein geben, wenn jemand benötigt:

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; 
      } 
Verwandte Themen