我有一个 .Net 函数,它接受 3 个参数,所有参数都是可选的。像这样的事情:
public List<MyObject> Search(string colour, string size, string name)
{
var result = (from c in MyTable where .... select c).ToList();
}
我的问题是,最好的方法是什么where
部分。最好是创建动态 linq 吗?在 linq 中,具有可选 where 参数的最佳模式是什么?
所以,在 SQL 中,是这样的:
SELECT *
FROM MyTable
WHERE (@colour <> '' AND colour = @colour)
AND (@size <> '' AND size = @size)
AND (@name <> '' AND name = @name)
但我希望有一个更简洁、更容易接受的模式来在 linq 中执行此操作。
Chain Where
检查 null 的子句
var result = context.MyTable
.Where(t => color == null || color == t.Color)
.Where(t => size == null || size == t.Size)
.Where(t => name == null || name == t.Name)
.ToList();
另一种方法是仅在需要时添加条件
var query = context.MyTable;
if (color != null) query = query.Where(t => t.Color == color);
if (size != null) query = query.Where(t => t.Size == size);
if (name != null) query = query.Where(t => t.Name == name);
var result = query.ToList();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)