рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдХрдВрдкрд╛рдЙрдВрдб рдХреБрдВрдЬреА WHERE рдХреНрд▓реЙрдЬ

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЬрдм рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИ, рддреЛ рдореИрдВ рд╕рдордЧреНрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг:

рдЬрдм рд╕рдВрд╕реНрдХрд░рдг рдХреА "рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ" рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЖрдИрдбреА рдФрд░ рд╕рдВрд╢реЛрдзрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕рдордЧреНрд░ рдХреБрдВрдЬреА (рдЖрдИрдбреА, рд╕рдВрд╢реЛрдзрди) рдХреА рдкреНрд░реЗрд╖рд┐рдд рд╕реВрдЪреА рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдЪрдпрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдРрд╕реА SQL рдХреНрд╡реЗрд░реА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧреА (рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдкрд╛рдБрдЪ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП):
/*  1 */ select * from dbo.[Items] i where (i.Id = 1 and i.Revision = 2) OR (i.Id = 1 and i.Revision = 4) OR (i.Id = 3 and i.Revision = 3) OR (i.Id = 3 and i.Revision = 4) OR (i.Id = 5 and i.Revision = 9) 

рд▓реЗрдХрд┐рди рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдкрдХреЛ рд╕рдордЧреНрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдРрд╕реА рдХреНрд╡реЗрд░реА рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдзрд┐рдХрддрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 context.Items.Where(i=> idList.Contains(i.Id) && revisionList.Contains(i.Revision)) 

рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдиреБрд░реЛрдз (рдЕрд╡рдзрд╛рд░рдгрд╛) рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛:
 /*  2 */ select * from dbo.[Items] i where i.Id in (1, 3, 5) and i.Revision in (2, 3, 4, 9) 

рдпрджрд┐ рдЖрдЗрдЯрдо рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдирд┐рдореНрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╡рд╛рд▓реЗ рддрддреНрд╡ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреНрд╡реЗрд░реА рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЧреА:
Id = 3, рд╕рдВрд╢реЛрдзрди = 2
Id = 3, рд╕рдВрд╢реЛрдзрди = 4
рдФрд░ рд╕рдордЧреНрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдРрд╕реА рд░реЗрдЦрд╛рдПрдБ рд╣реИрдВ:
Id = 5, рд╕рдВрд╢реЛрдзрди = 4
Id = 3, рд╕рдВрд╢реЛрдзрди = 2

рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВ?

рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, ORM рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╡рд┐рдзрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ:
рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рд╕реВрдЪреА рдореЗрдВ рдЖрдИрдбреА рдФрд░ рд╕рдВрд╢реЛрдзрди рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рдВрдЧрддрд┐ рд╕реЗ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рддрд╛рд░ рдХрд╛ рд╕рдВрдШрд╛рдд, рдпрд╛, рдпрджрд┐ Id рдФрд░ рд╕рдВрд╢реЛрдзрди рдкреНрд░рдХрд╛рд░ int рдХреЗ рд╣реИрдВ, рддреЛ рдСрдлрд╕реЗрдЯ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рдВрдмреЗ (bigint) рдорд┐рд▓рддреЗ рд╣реИрдВред
рд╕рдВрдШрдЯрди рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП:
 /*  3 */ select * from dbo.[Items] i where CONVERT(nvarchar(10), i.Id)+ ',' + CONVERT(nvarchar(10), i.Revision) in ('1,2', '1,4', '3,3', '3,4', '5,9') 

рдпрджрд┐ рд╣рдо "рдЕрдиреБрд░реЛрдз 1" рдФрд░ "рдЕрдиреБрд░реЛрдз 3" рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрддрдВрдн (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ 2 рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рд╕рдВрдЪрд╛рд▓рди рдФрд░ 2 рд╕рдВрдЧрддрд┐ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдФрд░ "рдЕрдиреБрд░реЛрдз 1" рдореЗрдВ рдХреЗрд╡рд▓ рддреБрд▓рдирд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ "рдЕрдиреБрд░реЛрдз 1" рд╕рд╕реНрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди MSSQL 2008 R2 рджреЛрдиреЛрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛ рджреЗрддрд╛ рд╣реИ (рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдЙрд╕ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╣реИрдВ)ред

рддреЛ, рдЖрдкрдХреЛ "рдЕрдиреБрд░реЛрдз 1" рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХреНрд╡реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреИрд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИред

рдЗрдХрд╛рдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдкрдХреЛ рд╕рдордЧреНрд░ рдХреБрдВрдЬреА рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
 context.Items.Where(i=> (i.Id == 1 && i.Revision == 2) || (i.Id == 1 && i.Revision == 4) || (i.Id == 3 && i.Revision == 3) || (i.Id == 3 && i.Revision == 4) || (i.Id == 5 && i.Revision == 9)) 

рд▓реЗрдХрд┐рди рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ! .NET рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 i.Id == list.Id && i.Revision == list.Revision 

рдлрд┐рд░ рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ, рд╕реВрдЪреА рдХреЗ рдмрдЬрд╛рдп рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреА рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рд╕реВрдЪреА рдФрд░ рд╕реВрдЪреАред рд╕рдВрд╢реЛрдзрди рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ||

рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ:
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╕рдВрдпреБрдХреНрдд рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рд╣рдорд╛рд░реА рд╕реВрдЪреА рд╕реВрдЪреА рд╣реИред рдЬрд╣рд╛рдВ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ рдИрдж, рд╕рдВрд╢реЛрдзрди рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИред
рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ, рдЬрд╣рд╛рдВ рдмрд╛рдЗрдирд░реА рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдирд░реА рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ 3 рдореБрдЦреНрдп рдХреНрд╖реЗрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ:

list.Id рдФрд░ list.Revision рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВ, рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рджрд╕реНрдпред рдЗрд╕рдХреА ReflectedType рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реВрдЪреА рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ, рддреЛ рд╣рдо ConstExExpression рдХреЗ рд╕рд╛рде MemberExpression (list.Id) рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Id рдорд╛рди рдкреНрд░рддрд┐рдмрд┐рдВрдмрди рдпрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЙрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рдореЗрдВ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реИ:
 BinaryExpression BuildExpression(ExpressionType type, List<BinaryExpression> expressions) { if(expressions.Count == 0) return null; if(expressions.Count == 1) return expressions[0]; var resExpression = expressions[0]; for (int i = 1; i < expressions.Count; i++) resExpression = Expression.MakeBinary(type, resExpression, expressions[i]); return resExpression; } 

рд▓реЗрдХрд┐рди рдПрдХ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИред рджрд╛рдИрдВ рдУрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдкреНрд░рддреНрдпреЗрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рддреБрд▓рдирд╛ рдмрд╛рдИрдВ рдУрд░ рдХреА рдкреВрд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ:
 ((((((i.Id == 1 && i.Revision == 2) || (i.Id == 1 && i.Revision == 4)) || (i.Id == 3 && i.Revision == 3)) || (i.Id == 3 && i.Revision == 4)) || (i.Id == 5 && i.Revision == 9)) 

рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ, рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрд╖реНрдардХ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реВрдЪреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреАред рдФрд░ рдпрд╣ рд╕рдм рдареАрдХ рд╣реЛрдЧрд╛, рдЬрдм рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реВрдЪреА рдореЗрдВ ~ 1000 рддрддреНрд╡реЛрдВ (рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ) рдХреЗ рд╕рд╛рде, рдПрдХ StackOverflowException рдЙрдбрд╝ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк LINQ рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреНрд╡реЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдШрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИред

рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд╣реА рдкрд░ рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреЗрдбрд╝ рдХреА рддрд░рд╣ рдмрдирд╛рдирд╛ рд╣реИ:
 private static BinaryExpression BuildExpression(ExpressionType type, List<BinaryExpression> expressions) { if (expressions.Count == 0) return Expression.Equal(Expression.Constant(0), Expression.Constant(1)); //  ,        else if (expressions.Count == 1) return expressions[0]; var center = expressions.Count / 2; return Expression.MakeBinary(type, BuildExpression(type, expressions.Take(center).ToList()), BuildExpression(type, expressions.Skip(center).Take(expressions.Count - center).ToList())); } 

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реВрдЪреА рдореЗрдВ 1,000,000 рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рднреА StackOverflowException рдирд╣реАрдВ рдмрдврд╝рд╛рддреА рд╣реИ (рдореИрдВ рдЗрд╕реЗ рдЕрдм рдФрд░ рдирд╣реАрдВ рдЬрд╛рдВрдЪрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде SQL рд╕рд░реНрд╡рд░ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ)ред

рдЗрди рд╕рднреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдмрдирд╛рдИрдВ, рдЬрд╣рд╛рдБ рдкрд░ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреЛрдбрдкреНрд▓реЗрдХреНрд╕ рдкрд░ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛, рдЬрд╣рд╛рдБ рдореИрдВрдиреЗ EFCompoundkeyWhere рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

Source: https://habr.com/ru/post/In152417/


All Articles