2

假设我有带有(名称列和编号列)的客户表,如果没有限制,用户可以进行查询以显示一个名称的编号或显示所有编号;

这个例子

    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 改变“where”WHERE

4

3 回答 3

5

您应该使用 LINQ 查询组合良好的事实- 并且您不需要使用查询表达式语法。所以:

// 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...
}

walther 的解决方案是另一种可行的替代方案,但它确实意味着在数据库中评估“我们真的希望将其作为查询的一部分” - 你最终会得到更难理解的 SQL。就个人而言,我更喜欢明确说明您是否希望特定过滤器成为查询的一部分。

于 2012-10-07T07:31:56.907 回答
5
 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 );

    }
 }

老实说,没有检查过它,但它应该可以工作。

于 2012-10-07T07:34:15.690 回答
-1
db.table_accounts.Where(p=>string.IsNullOrEmpty(name)||p.name = name);
于 2012-10-07T07:34:27.420 回答