рдЕрдЧрд▓реЗ ASP.NET MVC рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕реНрддрд░ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛, рдореБрдЭреЗ L2C рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ (рдореЙрдбрд▓ рдХрд╛ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг):
рдХрдХреНрд╖рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд▓рдВрдмреА рдЖрдИрдбреА {рдорд┐рд▓рддрд╛ рд╣реИ; рд╕реЗрдЯ; }
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; рд╕реЗрдЯ; }
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IEnumerable <рдкреИрд░рд╛рдореАрдЯрд░> рдкреИрд░рд╛рдореАрдЯрд░ {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; рд╕реЗрдЯ; }
}
рд╡рд░реНрдЧ рдкреИрд░рд╛рдореАрдЯрд░ {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд▓рдВрдмреЗ UserId {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; рд╕реЗрдЯ; }
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; рд╕реЗрдЯ; }
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; рд╕реЗрдЯ; }
}
рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, UserRepository рд╡рд░реНрдЧ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рд╡рд░реНрдЧ рдкреНрд░рдпреЛрдХреНрддрд╛рдкреНрд░рдХреНрд░рд┐рдпрд╛: MyProjectDataContext {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IEnumerable GetUsers () {
рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред
}
}
рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реЗрд▓реНрдкрд░ {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ IEnumerable <Model.User> ToModelUser (рдпрд╣ IEnumerable <DataAccess.User> рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) {
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рдЪрдпрди рдХрд░реЗрдВ (u => рдирдпрд╛ рдореЙрдбрд▓ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ {рдЖрдИрдбреА = u.Id, рдирд╛рдо = u.Name, рдкреИрд░рд╛рдореАрдЯрд░ = u.Parameters.ToModelParameters ()});
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ IEnumerable <Model.Parameter> ToModelParameters (рдпрд╣ IEnumerable <DataAccess.Parameter> рдкреИрд░рд╛рдореАрдЯрд░) {
рд╡рд╛рдкрд╕реА рдкреИрд░рд╛рдореАрдЯрд░ред рдЪрдпрди рдХрд░реЗрдВ (рдпреВ => рдирдпрд╛ рдореЙрдбрд▓ред рд╡реНрдпрд╛рд╕ {...});
}
}
рд▓рд┐рдЦрдиреЗ
var рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ = userRepository.GetUsers ()ред ToList ();
рд╣рдо рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд╕рд╛рде рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ 10 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , 11 рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЧрдП рдереЗред
рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛрдб рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВ:
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IEnumerable <рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛> GetUsers () {
рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдПрдБред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ .oModelUser ()ред рдЪрдпрди рдХрд░реЗрдВ (u => рдирдпрд╛ рдореЙрдбрд▓.рдЙрдЬрд╝рд░ {
Id = u.Id, Name = u.Name, Parameters = u.Parameters.Select (p => new Model.Parameter {...})
});
}
рддрд╕реНрд╡реАрд░ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдмрджрд▓ рд░рд╣реА рд╣реИред рдХреЗрд╡рд▓ 1 рдЕрдиреБрд░реЛрдз, рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рджреЛрдиреЛрдВ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВ
рдХреБрддреНрддреЗ рдХреЛ рдХрд╣рд╛рдБ рджрдлрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЧреЗрдЯрд╕реБрд╕рд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ: Linq2Sql рдФрд░ Linq2Object, рдФрд░ рджреВрд╕рд░рд╛ рдХреЗрд╡рд▓ Linq2Sql рдореЗрдВред
рдФрд░ рдЕрдм рдирд┐рд╖реНрдХрд░реНрд╖
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, Linn рдПрдХреНрд╕рдЯреЗрдВрд╢рдВрд╕ IEnumerable рдФрд░ IQueryable рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХреЛрдИ рд╕рдВрдпреЛрдЧ рдирд╣реАрдВ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ System.Linq.Enumerable рдФрд░ System.Linq.Queryable рдореЗрдВ рдХреНрд░рдорд╢рдГ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИред рдЪрдпрди (...) рд╡рд┐рдзрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИ (рдЬрд┐рд╕реЗ Reflector рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдХреНрдпрд╛ рдХрд░реЗрдВ?
рд╡рд╛рдкрд╕реА рдорд╛рди рдХреЗ рд▓рд┐рдП IQueryable <T> рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ 2 рддрд░реАрдХреЗ рд╣реИрдВ
рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реЗрд▓реНрдкрд░ {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдерд┐рд░ IQueryable <Model.User> ToModelUser (рдпрд╣ IQueryable <DataAccess.User) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: {
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рдЪрдпрди рдХрд░реЗрдВ (u => рдирдпрд╛ рдореЙрдбрд▓ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ {рдЖрдИрдбреА = u.Id, рдирд╛рдо = u.Name, рдкреИрд░рд╛рдореАрдЯрд░ = u.Parameters.ToModelParameters ()});
}
}
рдпрд╛ рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ IEnumerable <T> рдХреЛ IQueryable <T> .AsQueryable <T> () рд╡рд┐рдзрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ
рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдЪреМрдХрд╕ рд░рд╣рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рдордд рднреВрд▓рдирд╛ рдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реИред рдиреЗрдЯ 3.5 / 4.0