【问题标题】:LINQ to SQL ConditionLINQ to SQL 条件
【发布时间】:2011-08-21 12:48:39
【问题描述】:

嗨!

我想发出一个处理两种不同条件的 LINQ to SQL 请求。其中之一在下面的函数中列出。我想在下面的函数中包含的条件是我希望能够请求任何年龄的人。如何重写此函数,以便它处理对 1. 特定年龄的人或 2:任何年龄的人的请求。

 public IQueryable test(int age)

    {

        var persons = from p in db.Person

                      where p.age = age

                      select new

                      {

                          p.name

                      };



        return persons;

    }

【问题讨论】:

  • 您为什么要对单个值使用匿名类型?

标签: c# linq-to-sql


【解决方案1】:
var persons = from p in db.Person
select new                      
{                          
    p.name,
    p.age
};

if (age > 0) // or declare a bool to check age needs to be filtered.
{
    persons = persons.Where(p => p.age == age);
}

【讨论】:

  • 通过此查询,您始终可以从数据库中获取所有人。可能不利于性能。
  • 性能目前尚未被指定为问题;这将是我在可读性/可维护性方面的首选方法。
【解决方案2】:
public IQueryable test(Nullable<int> age)
{ 
      var persons = from p in db.Person

                  where p.age = age.HasValue ? age.Value : p.age

                  select new

                  {

                      p.name

                  };

    return persons;

}

如果您将null 传递给此函数,您将获得任何年龄的人。

【讨论】:

  • 这个和SQL语句一样age = ISNULL(@age,age)
  • 其中 p.age == (age.HasValue ? age.Value : p.age)
【解决方案3】:
  1. 编写两个查询。
  2. 使用query composition.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2011-03-19
    相关资源
    最近更新 更多