获取自定义对象我有这样的方法。从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
你想弄清楚如何返回一个动态对象? –