2016-03-02 55 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,它像一个魅力。 –