当前位置: 首页 > 面试题库 >

在Linq查询中动态选择属性

红明德
2023-03-14
问题内容

我正在使用c#中的linq查询遇到一个问题,我的linq查询如下

list = (from row in dt.AsEnumerable()
                            select new Perfmon
                            {
                                id = row.Field<long>("id"),
                                counter1 = row.Field<string>("counter"),

                            }).ToList();

我有一个 perfmon 类,它包含诸如(id,counter1,counter2
…)之类的属性,现在有20多个计数器,我已经html" target="_blank">开发了sql查询以根据参数中传递的计数器名称选择id和计数器,例如,如果我已经传递了counter1,它将仅选择id,counter1(重命名为counter)

如果我将在这里使用开关盒,那么它将有20个女巫盒,有人可以帮我如何在linq中动态绑定属性吗?

提前致谢。


问题答案:

您可以使Perfmon类有字典支持,而不是由每个属性的字段支持。喜欢:

class Perfmon
{
    private readonly Dictionary<string, string> _counters = new Dictionary<string, string>();

    public Perfmon(params KeyValuePair<string, string>[] knownCounters)
    {
        foreach (var knownCounter in knownCounters)
        {
            SetCounter(knownCounter.Key, knownCounter.Value);
        }
    }   
    public void SetCounter(string name, string value)
    {
        _counters[name] = value;
    }

    protected string GetCounterValue(string name)
    {
        if (_counters.ContainsKey(name))
            return _counters[name];
        else
            return null;
    }

    public string Counter1 { get { return GetCounterValue("Counter1"); } }
    public string Counter2 { get { return GetCounterValue("Counter2"); } }
    public string Counter3 { get { return GetCounterValue("Counter3"); } }
}

构造函数在那里,因此您可以轻松地在查询中使用它,例如:

var counterName = "Counter2";
list = (from row in dt.AsEnumerable() 
                            select new Perfmon(new KeyValuePair<string, string>(counterName, row.Field<string>("counter")))
                            { 
                                id = row.Field<long>("id")
                            }).ToList();


 类似资料:
  • 问题内容: 我的SQL代码如下: 等效的linq表达式是什么? 问题答案: 我第一次尝试在 来源 LINQ to SQL中的NOT IN子句

  • 问题内容: 我有一个数据库字段名称调用,我正在尝试使用如下所示的变量名称来选择它: 显然,SQL将解释为字符串,而不是数据库的字段,我如何以这种方式将其识别为字段名而不是字符串,可能没有任何select或if语句。 问题答案: 试试这个: 您必须组成一个动态查询,并使用 要在事物的“动态”方面添加更多内容,请使用存储过程。请参见此处的示例: http://www.marten-online.com

  • 我在这里找到了一个解决方案:如何使用ApacheCamel和MongoDB创建动态equals查询? 但这看起来需要做很多工作。难道Camel没有更简单的方法将值传递给MongoDB查询吗?我希望我们能传递Mongo使用的实际find({})语言。 以下是我的工作,一些日志显示了它在做什么:

  • 问题内容: 假设我有一个表,在字符串()列中包含格式化的值。这些值应该是由某些const符号分隔的字符串(让它是分号)。例如, 或者 分隔符始终是分隔符,不能是值的一部分。 我需要检查该表中是否已经有一行,并且该列中的值列表至少包含指定的一项。换句话说,我有一个值列表: 分隔符: 我需要编写一个执行此操作的linq-to-sql查询: 应该提到的是,任何搜索值都可以包含其他值。也就是说,我可能正在

  • 从表A中选择columnList=>Id1,Id2,Id3,Id4,ID5。 使用结果,我需要从表B中查询。 以下是案例 就像这个案子会变大一样。我想知道如何在Spring Data JPA中实现这一点。它类似于Spring Data JPA中的动态投影。 注意:存储在TableA中的列名在TableB中使用。 理由:如果我能做到这一点,它将很容易拉出数据,这只是我需要的。 我们能使用Criter

  • 问题内容: 我有一张表,默认有20列 这20列名为D1 D2 D3 … D20,现在带有选择查询,我想动态添加其他列。例如,对于D21 D22 … D31,我如何编写查询以动态递增添加此列值..最大限制为31,请帮助 缺省表列 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D19 D20 现在我想在连续性将列添加到D2