【问题标题】:Linq equivalent to ColumnName = @Param or @Param IS NULLLinq 相当于 ColumnName = @Param 或 @Param IS NULL
【发布时间】:2015-09-05 04:26:46
【问题描述】:

我正在尝试使用 Linq 做一些事情,我可能想要所有项目,或者我可能想要项目的子集。这将基于一个可为空的 int (int?)。

在 SQL 中我会这样做:

SELECT Column1, Column2, Column3 
FROM dbo.MyTable
WHERE Column1 = @Param1 OR @Param1 IS NULL

我可以在 LINQ 中做类似的事情吗?

【问题讨论】:

  • 您确定要检查@Param1 是否为空吗?这是对查询输入的检查,因此您可以运行查询之前执行此操作。

标签: c# linq


【解决方案1】:

我假设你的意思是

select col1, col2, col3
FROM dbo.MyTable
WHERE Column1 = @Param1 OR Column1 = null

如果是这样,这就是查询 var 结果 = 来自 MyTable 中的 x 其中(x.Column1 == null)|| (x.Column1 == param1) 选择 x;

或者你想在它为空的时候全选?

然后运行不同的查询

if(param1.IsNull())
{
  result =  from x in MyTable
        select x; 
}
else
{
  result =  from x in MyTable
        where x.Column1 == param1
        select x; 
}

是的,我没有添加列,但逻辑是合理的。

【讨论】:

    【解决方案2】:

    您没有提供任何 c# 代码,所以我不知道您的实体,但如果您使用的是 EF,您应该获得一个名为 MyTable 的实体。此外,以下 linq 查询返回一个匿名类型,您可能希望将其替换为一个类。

    假设 @Param1 参数的变量名称是 Param1 并且 dbContext 是您的 DataContext 对象,则 linq 代码应如下所示。

    var result = from t in dbContext.MyTable
    where Param1 = null or t.Column1 = Param1
    select new {
      Column1 = t.Column1,
      Column2 = t.Column2,
      Column3 = t.Column3
    };
    

    【讨论】:

      【解决方案3】:

      您可以通过多个步骤构建查询:

      var query = table.Select(x => new {x.Column1, x.Column2, x.Column3});
      
      if (param.HasValue)
          query = query.Where(x => x.Column1 == param.Value);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 2019-08-11
        • 1970-01-01
        • 2022-01-07
        相关资源
        最近更新 更多