if语句里面的LINQ

时间:2012-10-07 07:29:24

标签: c# linq-to-sql

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

这个例子

    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

3 个答案:

答案 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);