[英]Convert string into lambda expression c# (linq to entity)
我正在嘗試創建一個動態系統,該系統執行以下操作:
dbContext.Users.Where(x=>(x.Initials + " " + x.Surname).Contains("someGivenString")).ToList();
在我的動態系統中,我有一個String:
string combined = "x.Inititals + \" \" + x.Surname";
我想知道如何使用Expression.Call為此創建一個正確的查詢。
我希望我的問題很清楚。 提前致謝!
您可以使用運行時C#編譯 。 有關更多信息和示例,請參見此處: http : //www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtime
明確地說:例如,您可以准備模板並使用自己的lambda表達式實現它,然后該字符串在運行時編譯並運行。
擴大我的評論。 如果您的對象僅包含簡單屬性,則將其轉換為數據表,如下所示:
public static DataTable ObjectToData(object o)
{
DataTable dt = new DataTable("OutputData");
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
o.GetType().GetProperties().ToList().ForEach(f =>
{
try
{
f.GetValue(o, null);
dt.Columns.Add(f.Name, f.PropertyType);
dt.Rows[0][f.Name] = f.GetValue(o, null);
}
catch { }
});
return dt;
}
我是根據我的特定需求寫的,但是您應該明白這一點。
然后執行易於選擇where子句非常自定義的整個選擇。 喜歡
初始+''+姓氏,例如'%someGivenString%'
然后您只需對查詢進行排序或選擇表格即可。 我喜歡使用簡單的自制課程:
public static class CTableManager
{
public static DataTable Select(DataTable dt, string sFilter)
{
DataTable dtResult = dt.Clone();
try
{
dtResult = dt.Select(sFilter).CopyToDataTable();
}
catch { }
return dtResult;
}
public static DataTable Sort(DataTable dt, string sOrder)
{
DataTable dtResult = dt.Clone();
try
{
dt.DefaultView.Sort = sOrder;
dtResult = dt.DefaultView.ToTable().Copy();
}
catch { }
return dtResult;
}
public static DataTable SelectAndSort(DataTable dt, string sFilter, string sOrder)
{
DataTable dtResult = dt.Copy();
if (sFilter != string.Empty)
{
dtResult = Select(dtResult, sFilter);
}
if (sOrder != string.Empty)
{
dtResult = Sort(dtResult, sOrder);
}
return dtResult;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.