Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LastIndexOf in LINQ to Entities

I'm using LINQ to Entities to fetch elements from a MSSQL data base and I need them sorted by the last index of a string:

var data = db.GetEntities().
           OrderBy(e=>e.StringProperty.LastIndexOf("Foo")).ToList()

However, LINQ to Entities does not support LastIndexOf. I've tried searching for similar questions but all I've found was this which does not address my issue (ordering). Searching on MSDN did not yield any results.

What would be the simplest way to accomplish this using LINQ to Entities (I don't want to have to do this after the ToList()).

like image 257
user3198545 Avatar asked Jan 15 '14 14:01

user3198545


2 Answers

You could try

OrderBy(e => e.StringProperty.Length - EntityFunctions.Reverse(e.StringProperty).IndexOf("ooF"))

I think Reverse and IndexOf are supported.

like image 73
Rawling Avatar answered Sep 29 '22 00:09

Rawling


Do the sorting using LINQ to Objects

var data = db.GetEntities()
    .AsEnumerable()
    .OrderBy(e => e.StringProperty.LastIndexOf("Foo"))
    .ToList();

Using AsEnumerable will allow you to retain deferred execution, it's the better compromise than calling ToList and then performing the OrderBy.

like image 36
James Avatar answered Sep 29 '22 01:09

James