14

Làm cách nào để nối các chuỗi trong Entity Framework 4 Tôi có dữ liệu từ một cột và tôi muốn lưu dưới dạng chuỗi một chuỗi được phân tách bằng dấu phẩy như "value1, value2, value3" Có phương pháp hay nhà điều hành nào thực hiện việc này không EF4? Ví dụ: cho phép nói rằng tôi có hai cột FruitFarms với các giá trị sau:Làm cách nào để nối các chuỗi trong Truy vấn khung thực thể?

  • Táo
  • Bananas
  • Dâu tây

Nếu tôi làm như thế này

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

Chắc chắn tôi sẽ gặp lỗi này

LINQ to Entities không nhận ra phương thức 'System.String Join (System.String, System.Collections.Generic.IEnumerable`1 [System.String])', và phương pháp này không thể được dịch sang cửa hàng biểu hiện.

Có giải pháp nào cho vấn đề này không?

Trả lời

13

Bạn phải thực hiện truy vấn trước khi chiếu. Nếu không, EF cố gắng dịch phương thức Join thành SQL (và rõ ràng là không thành công).

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

Vấn đề là tôi muốn các nguồn dữ liệu là IQueryable để ràng buộc nó vào lưới sau đó nó sẽ để máy chủ phân trang riêng của mình . –

+2

Thực hiện phân trang trước khi ghép nối. –

1

Đã trả lời @Yakimych và suy nghĩ sẽ cung cấp của tôi nếu có ai đó cần:

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