@ ইকারাসের প্রতিক্রিয়া বাড়ানোর জন্য: আপনি যদি দুটি ক্ষেত্র অনুসারে বাছাই করতে চান তবে আমি নীচের ফাংশনটি সম্পাদন করতে পারতাম (একটি ক্ষেত্রের জন্য Icarius এর প্রতিক্রিয়া খুব ভালভাবে কাজ করে)।
public static IQueryable<T> OrderByDynamic<T>(this IQueryable<T> q, string SortField1, string SortField2, bool Ascending)
{
var param = Expression.Parameter(typeof(T), "p");
var body = GetBodyExp(SortField1, SortField2, param);
var exp = Expression.Lambda(body, param);
string method = Ascending ? "OrderBy" : "OrderByDescending";
Type[] types = new Type[] { q.ElementType, exp.Body.Type };
var mce = Expression.Call(typeof(Queryable), method, types, q.Expression, exp);
return q.Provider.CreateQuery<T>(mce);
}
এটি ল্যাম্বডা এক্সপ্রেশনটির জন্য দেহটি ফাংশনটি ফিরিয়ে দেয় এটি স্ট্রিং এবং ইন্টের সাথে কাজ করে তবে প্রতিটি প্রোগ্রামারের প্রয়োজন অনুসারে এটি কাজ করতে আরও প্রকার যুক্ত করার জন্য এটি যথেষ্ট is
public static NewExpression GetBodyExp(string field1, string field2, ParameterExpression Parametro)
{
string TypeName1 = Expression.Property(Parametro, field1).Type.Name;
string TypeName2 = Expression.Property(Parametro, field2).Type.Name;
Type TypeAnonymous = null;
if (TypeName1 == "String")
{
string var1 = "0";
if (TypeName2 == "Int32")
{
int var2 = 0;
var example = new { var1, var2 };
TypeAnonymous = example.GetType();
}
if (TypeName2 == "String")
{
string var2 = "0";
var example = new { var1, var2 };
TypeAnonymous = example.GetType();
}
}
if (TypeName1 == "Int32")
{
int var1 = 0;
if (TypeName2 == "Int32")
{
string var2 = "0";
var example = new { var1, var2 };
TypeAnonymous = example.GetType();
}
if (TypeName2 == "String")
{
string var2 = "0";
var example = new { var1, var2 };
TypeAnonymous = example.GetType();
}
}
MemberExpression[] args = new[] { Expression.PropertyOrField(Parametro, field1), Expression.PropertyOrField(Parametro, field2) };
ConstructorInfo CInfo = TypeAnonymous.GetConstructors()[0];
IEnumerable<MemberInfo> a = TypeAnonymous.GetMembers().Where(m => m.MemberType == MemberTypes.Property);
NewExpression body = Expression.New(CInfo, args, TypeAnonymous.GetMembers().Where(m => m.MemberType == MemberTypes.Property));
return body;
}
এটি ব্যবহার করার জন্য নিম্নলিখিতটি সম্পন্ন হয়েছে
IQueryable<MyClass> IqMyClass= context.MyClass.AsQueryable();
List<MyClass> ListMyClass= IqMyClass.OrderByDynamic("UserName", "IdMyClass", true).ToList();
এটি করার আরও ভাল উপায় যদি থাকে তবে তারা এটিকে ভাগ করে নিলে দুর্দান্ত হবে
আমি এটির জন্য ধন্যবাদ সমাধান করতে সক্ষম হয়েছি: আমি কীভাবে লিনকের সাথে একাধিক সম্পত্তি ল্যাম্বদা এক্সপ্রেশন করতে পারি