рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдореИрдВ рдЖрдкрдХреЛ "AtContent.com рд╕реЗрд╡рд╛ рдХреА рдЖрдВрддрд░рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛" рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╛рдВрдЪрд╡реЗрдВ рд▓реЗрдЦ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреГрдкрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдореЗрдВ, рдореИрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдПрдЬрд╝реНрдпреЛрд░ рдЯреЗрдмрд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХреИрд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

Windows Azure рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ - рдПрдЬрд╝реНрдпреЛрд░ рдЯреЗрдмрд▓ рд╕реНрдЯреЛрд░реЗрдЬ - рдПрдХ рдЕрд╕реАрдорд┐рдд рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЧреИрд░-рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ред рдЗрд╕ рд╕рдВрдЧреНрд░рд╣рдг рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдЕрд╕реБрд╡рд┐рдзрд╛рдПрдБ рднреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, LINQ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЙрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрд┐рдирдореЗрдВ рддрд░реНрдХ рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╢реЛрдзрди рдХреЗ рдмрд┐рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЬрдм рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рддреЛ рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ REST рдПрдкреАрдЖрдИ рдХреА рдорджрдж рд╕реЗ рдЖрдк рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╛ рд╣реИред рдФрд░ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП LINQ рд╕реЗ REST API рддрдХ рдХреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рди рд▓рд┐рдЦреЗрдВред рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛ рдЦреЛрджрдиреЗ рдкрд░ рд╣рдореЗрдВ рдПрдХ рд╣рд▓ рдорд┐рд▓рд╛!
рдЗрд╕рд▓рд┐рдП, рдПрдЬрд╝реНрдпреЛрд░ рдЯреЗрдмрд▓ рд╕реНрдЯреЛрд░реЗрдЬ - рд▓рд╛рдЗрдирдХреНрдпреВ - рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдФрд░ рдХреЙрдиреНрдЯреЗрдВрд╕ рдХреНрд╡реЗрд╢реНрдЪрди рдмрдирд╛рдиреЗ рдХреА рдЕрдкрдиреА рдХреНрд╖рдорддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреНрд╡реЗрд░реА рдХреЛ рд░реАрд╕реНрдЯ рдПрдкреАрдЖрдИ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╕рдордп рд▓рд┐рдирдХреНрдпреВ рдХреА рдЧрд╣рд░рд╛рдИ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рддрдВрддреНрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╕рдорд╕реНрдпрд╛ рд╕реНрд╡рдпрдВ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо LINQ рдХреНрд╡реЗрд░реА рдХреЛ рдХреЗрд╡рд▓ рдХрд╣рд╛рдВ рд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдФрд░ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдВрдб рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЬреБрдбрд╝реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╢реНрди рдмрдирд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ Or рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдмреЗрд╢рдХ, рдЖрдк рдмрд╕ рдХрдИ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреА рдмреЗрдХрд╛рд░рддрд╛ рдЖрдкрдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдпрд╛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдХреА рдЕрдВрддрд┐рдо рд▓рд╛рдЧрдд рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред рд╕реМ рдкреНрд░рддрд┐рд╢рдд рдореЗрдВ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреА рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рде рднреА, рдПрдХ рдЕрдиреБрд░реЛрдз рдФрд░, рдХреЗ рдмреАрдЪ рдЕрдВрддрд░, рджрд╕ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдирд┐рд░реНрдгрдп рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред
рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред рдЦреЛрдЬ рдЗрдВрдЬрди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдкрдбрд╝рд╛ред IQuerable.Where () рдореЗрдВ, рдЖрдк рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ <Func <T, bool >> рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдзреЗ рдореЗрдВ рджреБ: рдЦ рдХреЗ рд╕рд╛рде рдРрд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдФрд░ рдЗрд╕реЗ рдкрд░рдЦрд╛, рдореБрдЭреЗ рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИред Invoke () рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдореА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рдереЗ, рдФрд░ рдПрдЬрд╝реНрдпреЛрд░ рдЯреЗрдмрд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рдРрд╕реА рдХреНрд╡реЗрд░реА рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрдкрд╡рд╛рдж рд▓реМрдЯрд╛рддреА рдереАред
рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореБрдЭреЗ рд░реЛрдХрд╛ рдирд╣реАрдВред LINQ рдХреЗ рдмрдЬрд╛рдп REST API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдиреЗ рдореБрдЭреЗ рдЬрдЧрд╛рдП рд░рдЦрд╛ред MSDN рдХреЗ рдЧрд╣рди рдкрдврд╝рдиреЗ рдХреЗ рдХреБрдЫ рд╣реА рджрд┐рдиреЛрдВ рдореЗрдВ рдФрд░ рдПрдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖ, рдЬрд┐рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
public static class LinqExtension { public static Expression<Func<T, bool>> Contains<T>(string ObjectStringName, string FieldStringNameToCompare, IList<String> ListOfValues) { Expression ExprBody = null; ParameterExpression ParameterObject = Expression.Parameter(typeof(T), ObjectStringName); var PropertyFieldToCompare = Expression.Property(ParameterObject, FieldStringNameToCompare); foreach (var ValueToCompare in ListOfValues) { ConstantExpression ValueConst = Expression.Constant(ValueToCompare, typeof(string)); BinaryExpression EqualTermExpression = Expression.Equal(PropertyFieldToCompare, ValueConst); if (ExprBody == null) { ExprBody = EqualTermExpression; } else { ExprBody = Expression.Or(ExprBody, EqualTermExpression); } } if (ExprBody == null) { ExprBody = Expression.IsTrue(Expression.Constant(false)); } var FinalExpression = Expression.Lambda<Func<T, bool>>(ExprBody, new ParameterExpression[] { ParameterObject }); return FinalExpression; } public static IQueryable<T> Contains<T>(this IQueryable<T> obj, string ObjectStringName, string FieldStringNameToCompare, IList<String> ListOfValues) { var Expression = Contains<T>(ObjectStringName, FieldStringNameToCompare, ListOfValues); if (Expression != null) return obj.Where<T>(Expression); return obj; } }
рдпрд╣ рдЖрдкрдХреЛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Contains рдХрд╛рд░реНрд░рд╡рд╛рдИ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, SQL рдореЗрдВ IN рдСрдкрд░реЗрд╢рди рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдиреЗ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ Azure Table Storage рдХреА рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХрд╛ рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рд▓рд╛рдЗрди рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЛ рдЬрд╛рдиреЗ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╡рд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
ConstantExpression ValueConst = Expression.Constant(ValueToCompare, typeof(string));
рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрд╣реНрд╡рд╛рди () рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рд░рдВрддрд░ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╡рд╕реНрддреБ рдХрд╛ рдореВрд▓реНрдп рдирд╣реАрдВред
рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдЖрдкрдХреЛ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред
рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рдзрд╛рди CPase рдУрдкрди рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрдврд╝реЗрдВ:
рдореИрдВ рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ
