假设我有一个客户表(名称列和数字列) 用户可以进行查询以显示一个名称的编号 如果没有限制,则显示所有数字;
这个例子
void DisplayNumbersOfName(string name)
{
using (dataclassDataContext db = new dataclassDataContext())
{
if(name=="")
var Names = from ta in db.table_accounts
select ( ta );
else
Names = from ta in db.table_accounts
where ta.name = name
select ( ta );
}
}
我不想这样使用,因为方法是
更复杂,我只想改变“哪里”哪里有IF
答案 0 :(得分:5)
您应该使用LINQ查询 compose 的事实 - 并且您不需要使用查询表达式语法。所以:
// Fixing naming conventions as I go, to make the code more idiomatic...
using (DataClassDataContext db = new DataClassDataContext())
{
IQueryable<YourDataType> query = db.TableAccounts;
if (name != "")
{
query = query.Where(ta => ta.Name == name);
}
// Use query here...
}
瓦尔特的解决方案是另一种可行的替代方案,但它确实意味着在数据库中评估“我们真的希望这作为查询的一部分” - 你最终会得到一些有点难以理解的SQL。我个人更喜欢明确你是否希望特定的过滤器成为查询的一部分。
答案 1 :(得分:4)
void DisplayNumbersOfName(string name)
{
using (dataclassDataContext db = new dataclassDataContext())
{
var Names = from ta in db.table_accounts
where (String.IsNullOrEmpty(name) || ta.name == name)
select ( ta );
}
}
没有检查它是否诚实,但它应该有用。
答案 2 :(得分:0)
db.table_accounts.Where(p=>string.IsNullOrEmpty(name)||p.name = name);