Linq相当于ColumnName = @Param或@Param IS NULL

时间:2015-09-04 20:02:21

标签: c# linq

我试图用Linq做些什么我可能想要所有的项目,或者我可能想要一些项目的子集。这将基于可空的int(int?)。

在SQL中我会这样做:

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

我可以在LINQ中执行类似的操作吗?

3 个答案:

答案 0 :(得分:0)

我认为你的意思是

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

如果是,则这是查询     var result =来自MyTable中的x             where(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; 
}

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

答案 1 :(得分:0)

您没有提供任何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
};

答案 2 :(得分:0)

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

var query = table.Select(x => new {x.Column1, x.Column2, x.Column3});

if (param.HasValue)
    query = query.Where(x => x.Column1 == param.Value);
相关问题