C#Dynamic Linq Where Clause

时间:2016-04-16 01:56:16

标签: c# sql linq

有没有办法在LINQ中动态构建Where子句?

示例...今天我查询我的sql db,只有ServerGroup A有问题。我返回该组的故障代码。作品。但是,明天,ServerGroup A& B有问题。我不想手动更改我的LINQ查询,而是让它动态地将新的ServerGroup添加到WHERE子句中。 LINQ可以实现吗?我已经用Sql查询完成了它。

非常感谢您的帮助。

        var query = referenceDt.AsEnumerable()
            .Where(results => results.Field<string>("ServerGroup") == "A" ||
                             results.Field<string>("SeverGroup") == "B")
            .GroupBy(results => new
                {
                    FaultCode = results.Field<int>("FaultCode")
                })
            .OrderByDescending(newFaultCodes => newFaultCodes.Key.FaultCode)
            .Select(newFaultCodes => new
            {
                FaultCode = newFaultCodes.Key.FaultCode,
                Count = newFaultCodes.Count()
            });

2 个答案:

答案 0 :(得分:1)

这是.Contains()

的完美用例
var serverGroups = new string []{ "A", "B" }.ToList();

var query = referenceDt.AsEnumerable()
        .Where(results => serverGroups.Contains(results.Field<string>("ServerGroup")))
        .GroupBy(results => new
            {
                FaultCode = results.Field<int>("FaultCode")
            })
        .OrderByDescending(newFaultCodes => newFaultCodes.Key.FaultCode)
        .Select(newFaultCodes => new
        {
            FaultCode = newFaultCodes.Key.FaultCode,
            Count = newFaultCodes.Count()
        });

其中将动态生成serverGroup。

答案 1 :(得分:0)

您可以在Linq查询中使用Contains来获取等效于IN的SQL。