簡體   English   中英

將字符串轉換為Lambda表達式C#(將linq轉換為實體)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM