2011-05-09 81 views
0

嗨!LINQ to SQL條件

我想做一個處理兩個不同條件的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; 

    } 
+0

任何原因,你正在使用匿名類型的單個值? – 2011-05-09 08:56:28

回答

0
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); 
} 
+0

使用此查詢,您可以獲得數據庫中的所有人員。性能可能不好。 – edze 2011-05-09 09:01:24

+0

性能目前尚未被指定爲問題;這將是我首選的可讀性/可維護性方法,直到它。 – Jaymz 2011-05-09 09:03:16

+0

感謝這幫了我! – user473104 2011-05-09 09:52:33

1
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這個功能,你會得到任何年齡的人。

+0

這與SQL語句age = ISNULL(@ age,age) – jaywayco 2011-05-09 08:59:28

+0

相同,其中p.age ==(age.HasValue?age.Value:p.age) – edze 2011-05-09 11:32:52