我有一個數據輸入表單,用戶將在其中輸入DateFrom和DateTo字段。如何基於特定條件動態構建Linq查詢
Select From Date: <input type="text" id="datepickerfrom" name="datepickerfrom"/>
Select To Date: <input type="text" id="datepickerto" name="datepickerto"/>
<asp:Button ID="btnGetData" runat="server" OnClick="BtnGetData_Click" Text="Get Error List" />
我想構建一個Linq查詢,只檢索前100個記錄,如果沒有輸入提供。
如果用戶提供DateFrom並且沒有提供DateTo,用戶將選擇大於DateFrom的數據直到DateTime.Now。
如果用戶提供DateTo並且不提供DateFrom,則用戶將選擇小於DateTo的數據。
我現在有以下幾點:
public static List<ErrorLogData> GetLogErrorData(string appName, InputData data)
{
SqlConnection con;
List<ErrorLogData> errorLogData = null;
string query = "";
if (data.DateFrom == "" && data.DateTo == "")
{
query += "from ld in logData.errorLogs.Take(10000)";
}
if (data.DateFrom == "" && data.DateTo != "")
{
query += "from ld in logData.errorLogs where ld.errorTime <= " + data.DateTo;
}
if (data.DateFrom != "" && data.DateTo == "")
{
query += "from ld in logData.errorLogs where ld.errorTime >= " + data.DateFrom + " && <= " + DateTime.Now;
}
if (data.DateFrom != "" && data.DateTo != "")
{
query += "from ld in logData.errorLogs where ld.errorTime >= " + data.DateFrom + " && <= " + data.DateTo;
}
DateTime dateFrom = Convert.ToDateTime(data.DateFrom);
DateTime dateTo = Convert.ToDateTime(data.DateTo);
using (con = new SqlConnection(ConfigurationManager.AppSettings[conKey]))
using (WebEntities logData = new WebEntities())
{
logData.CommandTimeout = 300;
var errorLog = query +
select new ErrorLogData
{
ErrorID = ld.errorID,
ErrorTime = ld.errorTime,
UserName = ld.username,
ErrorType = ld.errorType,
Error = ld.error,
ControlNumber = ld.controlNumber
};
errorLogData = errorLog.ToList();
}
return errorLogData;
}
我不知道如何追加query
爲「select new ErrorLogData...
」語句有整個查詢。
這裏有什麼方法?
我想你錯過了SQL注入101 –
是否使用實體框架的選項? –
不一定。我可以使用常規方式。我爲了自己的緣故去學習Linq to Entity。試圖看看是否有辦法使用實體框架來實現我想要的功能 – gene