我有一個來自MVC提交的viewmodel類,並且我想根據用戶填寫的值從EF6獲取結果集,但忽略這些項目在那些空模型:使用非空對象屬性的EF6查詢條件
public class SearchFilterVM
{
public int? ID { get; set; }
public bool? Active { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleInitial { get; set; }
public DateTime? DateOfBirth { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}
基本上就是我尋找的是這樣的僞代碼:
var results = context.Members
.Where(x => x.Active == vm.Active.Value) // but only if vm prop is not null
.Where(x => x.FirstName == vm.FirstName) // but only if vm prop is not null
.Where(x => x.LastName == vm.LastName) // but only if vm prop is not null
.ToList();
(例如,如果過濾器模型屬性爲null,完全忽略他們)
當然,我不想使用類似上面的內容,因爲它會根據第一個標準進行查詢,然後根據第二個適用的標準進行查詢等,直到完成(我正在使用500k +行)。
我想不出一種使用LINQ查詢表達式的方法。
我可以做的是根據值的存在構建一個參數化的SQL語句,並附加條件,並最終通過EF6的RawSQLQuery傳遞它,這將工作在性能方面(並且可以很好地控制索引的順序字段爲更好的調整),但我想知道是否有一種「自然」的方式來通過LINQ完成相同的事情。
只有當它不是null時,纔會引用'vm'的值嗎?如果它是'null',那麼你想要做什麼?沒有那種條件? –
@GiladGreen - 正確,更新的問題,以適應 – jleach