2016-03-02 79 views
0

我想從數據庫中獲得一個IEnumerable<T>,並在'Select'方法中使用函數返回一個string值。但我始終找回Linq to Sql使用函數來設置一個值

「的方法不能被翻譯成店式」

錯誤。

我已經拍了一下所有的堆棧溢出有關的錯誤「LINQ到實體後不識別方法....而且這種方法不能被翻譯成店表達」

的唯一方式我發現來解決這個錯誤是應用函數的查詢運行後

void Main() 
{ 
    int eventId = 17; 

    IEnumerable<OccurrenceDropDownList> model = Occurrences.Select (s => new OccurrenceDropDownList 
     { 
     OccurrenceId = s.OccurrenceId, 
     Name = s.Name 
     }) 
     .AsEnumerable() 
     .Select(m => new OccurrenceDropDownList 
      { 
      OccurrenceId = m.OccurrenceId, 
      Name = m.Name, 
      Selected = setSelected(m.OccurrenceId, eventId) 
      }).AsEnumerable(); 

    foreach(var item in model) 
    { 
     Console.WriteLine(item.Name + " - id : " + item.OccurrenceId + " " + item.Selected); 
    } 
} 


public class OccurrenceDropDownList 
{ 
     public int OccurrenceId { get; set; } 
     public string Name { get; set; } 
     public string Selected { get; set; } 
} 

static string setSelected(int occurrence, int selectedid){ 
    if(occurrence == selectedid){ 
     return "selected"; 
    } 
    return ""; 
} 

有什麼辦法來應用功能作爲第一個查詢的結果

回答

1

應該simplier:?

int eventId = 17; 
IEnumerable<OccurrenceDropDownList> model = Occurrences 
    .Select(s => new OccurrenceDropDownList 
        { 
         OccurrenceId = s.OccurrenceId, 
         Name = s.Name, 
         //magic ternary if 
         Selected = (eventId == s.OccurrenceId) ? "selected" : String.Empty 
        }); 

就是這樣。如果操作符應該轉換爲SQL,我使用三元。

+0

謝謝Teo,它像一個魅力。 –