Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从lambda表达式获取自定义对象_C#_Linq_Lambda - Fatal编程技术网

C# 从lambda表达式获取自定义对象

C# 从lambda表达式获取自定义对象,c#,linq,lambda,C#,Linq,Lambda,我有这个方法: public static SiteSettingEntity GetSettings<SiteSettingEntity>(string siteId, Expression<Func<SiteSettingEntity, object>> properties) { // This method returns a SiteSettingEntity // fill

我有这个方法:

 public static SiteSettingEntity 
       GetSettings<SiteSettingEntity>(string siteId, 
                 Expression<Func<SiteSettingEntity, object>> properties)
 {
     // This method returns a SiteSettingEntity
     // filled with the values  selected in my expression
 }
公共静态站点设置实体
GetSettings(字符串siteId,
表达式属性)
{
//此方法返回SiteSettingEntity
//填充在我的表达式中选择的值
}
如果要调用:

var _siteSetting = SiteSettingService.GetSettings<SiteSettingEntity>(SiteID, 
                 s => new { s.BillCycleType, s.InvoiceComment, 
                s.AllowInvoiceDetailApproval, s.JobMinimumHours });
var\u siteSetting=SiteSettingService.GetSettings(SiteID,
s=>新的{s.BillCycleType,s.InvoiceComment,
s、 AllowWinVoiceDetailApproval,s.JobMinimumHours});
因此,这将返回一个由lambda表达式选择的填充了属性的对象

我的问题是:如何使用表达式动态返回相同的自定义对象

举个例子:如果要使用
.Select(s=>new{filed1=data.FieldX})
,则只需在返回对象中使用属性
.filed1


谢谢

如果要返回动态对象,可以执行以下使用ExpandooObject的简单示例:

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.");
}
dynamic duck=new DuckFactory().GetDuck();
//在使用该属性之前,请检查该属性是否存在
if(((IDictionary)duck).ContainsKey(“名称”))
{                
Console.WriteLine(duck.Name);//打印Fauntleroy
}
其他的
{
WriteLine(“可怜的鸭子没有名字。”);
}

请记住,强类型对象不会给您带来好处。

这是我最初的方法:

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);
    }
publicstatict GetSettings(字符串siteId、表达式属性)
{
字符串查询=$“从{SiteSettingEntity.TABLE_NAME}(NOLOCK)中选择前1个{DbTool.GetSqlFields(properties)},其中Sites.SiteID=@SiteID”;
var参数=新字典
{
{“SiteID”,SiteID},
};
var _data=DbTool.SqlExec(PowerDetailContext.GetConnectionString(siteId),CommandType.Text,query,parameters);
返回_data!=null?_data.FirstOrDefault():默认值(T);
}
Ang当我打电话时,我有:

var _siteSetting = SiteSettingService.GetSettings<SiteSettingEntity>(SiteID, s => new { s.BillCycleType, s.InvoiceComment, s.AllowInvoiceDetailApproval, s.JobMinimumHours });
var\u siteseting=SiteSettingService.GetSettings(SiteID,s=>new{s.BillCycleType,s.InvoiceComment,s.AllowInvoiceDetailApproval,s.JobMinimumHours});

我想要的var_siteSetting只是在调用时在new{}之间选择属性。如果我尝试使用_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);
    }
公共静态SiteSettingEntity GetSettings(字符串siteId、表达式属性)
{
字符串查询=$“从{SiteSettingEntity.TABLE_NAME}(NOLOCK)中选择前1个{DbTool.GetSqlFields(properties)},其中Sites.SiteID=@SiteID”;
var参数=新字典
{
{“SiteID”,SiteID},
};
var _data=DbTool.SqlExec(PowerDetailContext.GetConnectionString(siteId),CommandType.Text,query,parameters);
返回_data!=null?_data.FirstOrDefault():默认值(SiteSettingEntity);
}

很抱歉,您想做什么还不清楚。是否要从lambda表达式中提取字段值?是否尝试执行类似的操作?是否尝试找出如何返回动态对象?是的,我要从表达式中提取所有属性并返回仅包含这些属性的“自定义对象”。