近日做幾個項目用到linq動態查詢,但微軟官方所提供的那些動態查詢機制相當複雜, 網上也有不少網友發過一些動態查詢的方案,本人覺得那些方案比較繁索,也不易理解,今提供一種易理解簡單實用的方法.
方法如下:
在中介層寫:
public List<View_InvoiceTransferLog> GetTransferLogByCondition(DateTime? startDate,
DateTime? endDate,int? startNum,int? endNum, InvoiceLogType logType)
{
int theType = (int)logType;
IQueryable<View_InvoiceTransferLog> query = from view in Context.View_InvoiceTransferLogs
where
(startDate == null || view.LogDate >= startDate) &&
(endDate == null || view.LogDate <= endDate) &&
(startNum == null || view.InvoiceStartNum >= startNum) &&
(endNum == null || view.InvoiceEndNum <= endNum) &&
view.TransferType == theType
select view;
return query.ToList();
}
調用過程如下:
在ui層寫
protected void SearchButton_Click(object sender, EventArgs e)
{
if (!HaveCondition())
{
GetAllDataByStatus();
return;
}
DateTime? startDate = null;
DateTime? endDate = null;
int? startNumber = null;
int? endNumber = null;
if (!ValidateData())
{
return;
}
//get select condition
//
if (!string.IsNullOrEmpty(StartDate.Text.Trim()))
{
startDate = DateTime.Parse(StartDate.Text.Trim());
}
if (!string.IsNullOrEmpty(EndDate.Text.Trim()))
{
endDate = DateTime.Parse(EndDate.Text.Trim());
}
if (!string.IsNullOrEmpty(StartNum.Text.Trim()))
{
startNumber = int.Parse(StartNum.Text.Trim());
}
if (!string.IsNullOrEmpty(EndNum.Text.Trim()))
{
endNumber = int.Parse(EndNum.Text.Trim());
}
List<View_InvoiceTransferLog> list = _control.GetTransferLogByCondition(startDate, endDate, startNumber, endNumber,InvoiceLogTypeEnum);
gd.DataSource = list;
gd.DataBind();
}
簡單實用的一種動態查詢方法,就這麼幾句即可實現.本文屬本人原創,轉載請註明出處.代碼開源.