根据参数创建匿名对象

时间:2017-06-21 12:41:31

标签: c#

为了简化问题,我想我有一个带有两个布尔参数getParamA和getParamB的方法。

public JsonResult MyMethod(bool getParamA, bool getParamB)

有没有像三元运算符那样的方法或者说如果getParamA == true和getParamB == false,例如,我创建一个这样的匿名对象:

//this is an entityframework query 
var result = entityContext.MyTable.Select(r=> new 
{ 
      paramA = r.paramA // because getParamA = true
      // don't create paramB because getParamB is false  
});

我知道使用两个参数(使用if else条件)很容易实现它,但如果我们有超过5个参数(因为你需要进行所有测试),事情会变得复杂......

1 个答案:

答案 0 :(得分:1)

你可以,但它不是真正有效的代码。它使您的代码完全混乱:

.Select( r => getParamA && getParamB
              ? (object)new { A = r.A, B = r.B }
              : (getParamA ? new { A = r.A }
                           : (getParamB ? new { B = r.B }
                                        : null
                             )
                )
       );

更好的选择可能是ExpandoObject,它在内部使用字典来存储其属性和值。

dynamic eo = new ExpandoObject();

if (getParamA)
{
    eo.A = r.A;
}

if (getParamB)
{
    eo.B = r.B;
}