LINQ generating SQL not supported by SQL Server 2008R2 -


i using ef 6.1.3 in asp.net mvc 5 project. although development environment sql server 2012, qa , production on sql server 2008 r2.

i have report show top 5 procedure codes utilized physician, have simple entity id, name, code1, code2,... code5.

there fair amount of logic in building linq query, list of physician , list of codes , join them. here code joins them , picks top 5 codes:

var report =     pr in providerrisklevels     join nc in newcodes on pr.provider.providerid equals nc.providerid     pr.riskcategoryid == riskscoreids.visiblerisk         && (filterrisklevelnums.contains(pr.risklevelnum))         && (filterspecialtyid == 0 || pr.provider.specialty.specialtyid == filterspecialtyid)     select new reportnewcodesentity     {         providerid = pr.provider.providerid,         providername = pr.provider.name,         providercode = pr.provider.providercode,         specialtyname = pr.provider.specialty.name,         specialtycode = pr.provider.specialty.specialtycode,         riskscore = pr.riskscore,         risklevelname = pr.risklevelname,         risklevelnum = pr.risklevelnum,         newcode1 = nc.codes.orderbydescending(c => c.volume).firstordefault().procedurecode,         newcode2 = nc.codes.orderbydescending(c => c.volume).skip(1).firstordefault().procedurecode,         newcode3 = nc.codes.orderbydescending(c => c.volume).skip(2).firstordefault().procedurecode,         newcode4 = nc.codes.orderbydescending(c => c.volume).skip(3).firstordefault().procedurecode,         newcode5 = nc.codes.orderbydescending(c => c.volume).skip(4).firstordefault().procedurecode     }; return report; 

the problem 4 skip().firstordefault() generate sql syntax not available on sql server 2008 r2:

 offset x rows fetch next 1 rows  

where x = 1 4

i'm sure can move stored procedure (much better @ t-sql linq), since have been trying grip on linq, wondering if there either:

  1. a directive tell linq version of target database generate compliant code
  2. another method extract these top 5 codes.

i have codes ordered correctly in newcodes (see below) unable pick them without skip (which required it's own sort clause).

var newcodes =     cc in codecounts     group cc         new {cc.providerid}         g     select new providernewcodesentity     {         providerid = g.key.providerid,         codes = g.orderbydescending (x => x.volume).take(5).tolist()     }; 

best, scott

in order linq generate compatible code, edited generated edmx file (don't shriek yet , keep reading).

we found (on line 7)

<schema namespace="complianceriskmodel.store" providermanifesttoken="2012" provider="system.data.sqlclient"  ...> 

and changed

<schema namespace="complianceriskmodel.store" providermanifesttoken="2008" provider="system.data.sqlclient" ...> 

to prevent losing setting every time refresh model database, adding build task automatically update edmx file in beforebuild target, described @ http://www.programmingmotility.com/2011/05/setting-providermanifesttoken-for-sql.html

best, scott


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -