14

我如何連接實體框架中的字符串4我有一個列中的數據,我想保存爲一個逗號分隔的字符串,如「value1,value2,value3」 是否有方法或操作員這樣做EF4? 例如:讓說,我有兩列FruitFarms具有以下值:如何連接實體框架查詢中的字符串?

  • 蘋果
  • 香蕉
  • 草莓

如果我不喜歡這個

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

當然,我會得到這個錯誤

LINQ to Entities不識別方法'System.String加入(System.String,System.Collections.Generic.IEnumerable`1 [System.String])''方法,並且此方法無法轉換爲存儲表達。

有沒有解決方法?

回答

13

您必須在投影前執行查詢。否則EF會嘗試將Join方法轉換爲SQL(顯然會失敗)。

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

的問題是我想要的數據源是IQueryable的將其綁定到網格,然後它會因此服務器本身分頁。 – 2010-11-04 10:36:52

+2

然後在連接之前進行分頁。 – 2010-11-04 14:41:56

1

接過@Yakimych的答案和想法都會提供礦山如果有人需要:

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