簡體   English   中英

屬性名稱為 Lambda C# 中的表達式

[英]Property Names as Lambda Expression in C#

更新問題以更清楚地了解我在這里要做什么。

我在這里真正想做的是使用 Z.EntityFramework.Extensions 將一些數據批量合並到數據庫中。 具體來說,我正在嘗試在 options.ColumnInputExpression 中創建指令,該指令采用我上面提到的表達式。 您可以在 dotnetfiddle.net/lwF8DZ 上看到一個示例

我已經為此工作了幾天,似乎無法取得任何進展。 這就是我所擁有的。

假設我有客戶 class。

public class Customer
{
    public int CustomerID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool IsActive { get; set; }
}

並使用這樣的東西我可以創建一個簡單的表達式來定位字段“描述”和“IsActive”

Expression<Func<Customer, object>> fieldsToUse = c => new { c.Description, c.IsActive };

這個表達式正是我想要的,但我不能硬核它,而是我必須使用這樣的列表:

List<string> fld = new List<string>();
fld.Add("Description");
fld.Add("IsActive");

到目前為止,我已經設法使用它:

public static Expression<Func<T, object>> GetExpression<T>(string propName)
{
    var arg = Expression.Parameter(typeof(T), "c");
    var property = Expression.Property(arg, propName);
    var conversion = Expression.Convert(property, typeof(object));
    var exp = Expression.Lambda<Func<T, object>>(conversion , new ParameterExpression[] { arg });
    return exp;
}

我可以這樣稱呼:

var exp = GetExpression<Customer>("IsActive");

但這只會給我以下信息:

Expression<Func<Customer, object>> sample = c => c.IsActive;

如何使用我擁有的內容創建初始表達式?

Expression<Func<Customer, object>> sample = c => new { c.Description, c.IsActive };

任何幫助,將不勝感激。 提前致謝!

你實際上不需要做你正在做的事情來解決你試圖解決的問題。 Z.EntityFramework.Extensions中的批量插入選項包括一個ColumnInputNames屬性,您可以使用它來代替提供表達式。 表達式語法可能只是一種方便的方法,它解析您給它的表達式並將其轉換為屬性名稱列表。

context.BulkInsert(list, options => 
    options.ColumnInputNames = new List<string>{ "Name", "IsActive" });

或者,給定您動態生成的fld列表:

context.BulkInsert(list, options => options.ColumnInputNames = fld);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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