Enrico Acampora
Enrico Acampora

Reputation: 33

Linq to Sql Using a function to set a value

I wanted to get from a database a IEnumerable<T> and within the 'Select' method using a function to return a string value. But I always get back the

'method cannot be translated into a store expression'

error.

I already took a look all the post on Stack Overflow about the error 'LINQ to Entities does not recognize the method .... and this method cannot be translated into a store expression"

The only way that I found to get around this error is apply the function after the query has run.

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

Is there any way to apply the function as result of the first query?

Upvotes: 0

Views: 25

Answers (1)

teo van kot
teo van kot

Reputation: 12491

It should be 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
                    });

That's all. I used ternary if operator that should be translated to SQL.

Upvotes: 1

Related Questions