我有一些表和下列條件的查詢:如果參數A爲空,如果沒有,請在查詢中使用它。我知道如何做到這一點在兩個步驟:Linq:如果參數爲空,如何排除條件
List<O> list = null;
if (A = null)
{
list = context.Obj.Select(o => o).ToList();
}
else
{
list = context.Obj.Where(o.A == A).ToList();
}
是否有可能具有相同的一個查詢? 感謝
我有一些表和下列條件的查詢:如果參數A爲空,如果沒有,請在查詢中使用它。我知道如何做到這一點在兩個步驟:Linq:如果參數爲空,如何排除條件
List<O> list = null;
if (A = null)
{
list = context.Obj.Select(o => o).ToList();
}
else
{
list = context.Obj.Where(o.A == A).ToList();
}
是否有可能具有相同的一個查詢? 感謝
如何:
list = context.Obj.Where(o => A == null || o.A == A)
.ToList();
編輯:你能做到在一個查詢,但仍然使用條件:
IEnumerable<O> query = context.Obj;
if (A != null)
{
query = query.Where(o => o.A == A);
}
var list = query.ToList();
我可能會寫這樣的查詢:
IQueryable<O> query = context.Obj;
if (A != null)
query = query.Where(o => o.A == A);
var list = query.ToList()
這不是一個表達式,但我認爲它很可讀。
此外,此代碼假定context.Obj
爲IQueryable<O>
(例如,您正在使用LINQ to SQL)。如果情況並非如此,請使用IEnumerable<O>
。
嘗試
context.Obj.Where(a => A != null && a.A == A).ToList()
應該都是不錯的。如果A爲空,則'a.A == A'將被忽略。
我選擇了
var list = context.Obj.Where(o => A.HasValue ? o.a == A : true);
我認爲你不需要'選擇()'那裏。 – svick
我希望你的意思是'A == null'! (C#應該避免編譯,但最好確保所發佈的代碼是以適當的可編譯形式發佈的。重要的是要批註發佈的代碼,因爲*會在某些語言中編譯[但不能按預期工作]。) – 2011-09-15 23:17:30