我试图用Linq做些什么我可能想要所有的项目,或者我可能想要一些项目的子集。这将基于可空的int(int?)。
在SQL中我会这样做:
SELECT Column1, Column2, Column3
FROM dbo.MyTable
WHERE Column1 = @Param1 OR @Param1 IS NULL
我可以在LINQ中执行类似的操作吗?
答案 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);