patterncsharpMinor
Optimization of code for searching in db
Viewed 0 times
codeoptimizationsearchingfor
Problem
This is my code:
How to optimize it>?
var test = (from x in myDb.myTable
where (x.name == tmp || x.name == tmp2 || x.name == tmp3) && x.unit == u
select x).FirstOrDefault();
if (test == null)
test = (from x in myDb.myTable
where (x.name == tmp || x.name == tmp2 || x.name == tmp3)
select x).FirstOrDefault();How to optimize it>?
Solution
var test = (from x in myDb.myTable
where (x.name == tmp || x.name == tmp2 || x.name == tmp3)
select x)
.AsEnumerable()
.OrderBy(x => x.unit == u ? 0 : 1)
.FirstOrDefault();I removed the
x.unit == u condition. Instead I sort the items to make the ones where this condition would be met to appear first.
FirstOrDefault then makes the rest.I split the EF part from the LINQ-to-objects part with
AsEnumerable() as I am not sure if EF can translate the order by to SQL. If it can, you can try thisvar test = (from x in myDb.myTable
where (x.name == tmp || x.name == tmp2 || x.name == tmp3)
orderby x.unit == u ? 0 : 1
select x)
.FirstOrDefault();Code Snippets
var test = (from x in myDb.myTable
where (x.name == tmp || x.name == tmp2 || x.name == tmp3)
select x)
.AsEnumerable()
.OrderBy(x => x.unit == u ? 0 : 1)
.FirstOrDefault();var test = (from x in myDb.myTable
where (x.name == tmp || x.name == tmp2 || x.name == tmp3)
orderby x.unit == u ? 0 : 1
select x)
.FirstOrDefault();Context
StackExchange Code Review Q#20760, answer score: 6
Revisions (0)
No revisions yet.