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