獲取自定義對象我有這樣的方法。從lambda表達式
我的問題是:我如何使用我的表達式動態返回自定義對象?舉個例子:如果你想使用.Select(s => new{ filed1 = data.FieldX})
,你可以使用屬性.filed1
作爲回報對象。如果你想使用.Select(s => new{ filed1 = data.FieldX})
,你可以使用屬性.filed1
作爲回報對象。
謝謝!
獲取自定義對象我有這樣的方法。從lambda表達式
我的問題是:我如何使用我的表達式動態返回自定義對象?舉個例子:如果你想使用.Select(s => new{ filed1 = data.FieldX})
,你可以使用屬性.filed1
作爲回報對象。如果你想使用.Select(s => new{ filed1 = data.FieldX})
,你可以使用屬性.filed1
作爲回報對象。
謝謝!
如果你試圖返回一個動態對象,你可以不喜歡使用ExpandoObject的這個簡單的例子:
public class DuckFactory
{
public ExpandoObject GetDuck()
{
dynamic duck = new ExpandoObject();
duck.Name = "Fauntleroy";
return duck;
}
}
然後調用它像:
dynamic duck = new DuckFactory().GetDuck();
// Check the property exists before using it
if (((IDictionary<string, Object>)duck).ContainsKey("Name"))
{
Console.WriteLine(duck.Name); // Prints Fauntleroy
}
else
{
Console.WriteLine("Poor duck doesn't have a name.");
}
只要記住你贏了」不會得到強類型對象的好處。
這是我原來的方法:
public static T GetSettings<T>(string siteId, Expression<Func<SiteSettingEntity, object>> properties)
{
string query = $"SELECT TOP 1 {DbTool.GetSqlFields(properties)} FROM {SiteSettingEntity.TABLE_NAME} (NOLOCK) WHERE Sites.SiteID = @SiteID";
var parameters = new Dictionary<string, object>
{
{"SiteID", siteId},
};
var _data = DbTool.SqlExec<T>(PowerDetailContext.GetConnectionString(siteId), CommandType.Text, query, parameters);
return _data != null ? _data.FirstOrDefault() : default(T);
}
昂時,我的電話我有這樣的:
var _siteSetting = SiteSettingService.GetSettings<SiteSettingEntity>(SiteID, s => new { s.BillCycleType, s.InvoiceComment, s.AllowInvoiceDetailApproval, s.JobMinimumHours });
了var _siteSetting我只想有間選擇了性能的新{}當我打了電話。如果我嘗試使用_siteSetting。 OtherProperty,「OtherProperty」將不會在代碼中可用。
再次閱讀後,我想你只是想從GetSettings方法返回SiteSettingEntity。
public static SiteSettingEntity GetSettings<T>(string siteId, Expression<Func<SiteSettingEntity, object>> properties)
{
string query = $"SELECT TOP 1 {DbTool.GetSqlFields(properties)} FROM {SiteSettingEntity.TABLE_NAME} (NOLOCK) WHERE Sites.SiteID = @SiteID";
var parameters = new Dictionary<string, object>
{
{"SiteID", siteId},
};
var _data = DbTool.SqlExec<SiteSettingEntity>(PowerDetailContext.GetConnectionString(siteId), CommandType.Text, query, parameters);
return _data != null ? _data.FirstOrDefault() : default(SiteSettingEntity);
}
對不起,但它不是很清楚你想要做什麼。你想從lambda表達式中提取字段值? –
你是否試圖做類似於[this](https://stackoverflow.com/questions/45874566/how-to-expand-object-to-primitive-properties-using-linq/45876836#45876836)? – luxun
你想弄清楚如何返回一個動態對象? –