So I am trying to order a query by an int var that is in an ordered list of the same int vars; e.g. the query must be sorted by the lists order of items. Each datacontext is from a different database which is the reason i’m making the first query into an ordered list of id’s based on pet name order, only the pet id is available from the second query’s data fields, Query looks like:
using (ListDataContext syndb = new ListDataContext())
{
using (QueryDataContext ledb = new QueryDataContext())
{
// Set the order of pets by name and make a list of the pet id's
var stp = syndb.StoredPets.OrderBy(x => x.Name).Select(x => x.PetID).ToList();
// Reorder the SoldPets query using the ordered list of pet id's
var slp = ledb.SoldPets.OrderBy(x => stp.IndexOf(x.petId)).Select(x => x);
// do something with the query
}
}
The second query is giving me a “Method ‘Int32 IndexOf(Int32)’ has no supported translation to SQL.” error, is there a way to do what I need?
LINQ to SQL (EF) has to translate your LINQ queries into SQL that can be executed against a SQL server. What the error is trying to say, is that the .NET method of
IndexOfdoesn’t have a SQL equivalent. You may be best to get your data from yourSoldPetstable without doing theIndexOfpart and then doing any remaining ordering away from LINQ to SQL (EF).Something like this should work:
Note: Your capitalisation of
PetIdchanges in your example, so you may wish to look at that.