如何根据特定条件动态构建Linq查询

时间:2015-09-14 21:02:01

标签: c# linq linq-to-entities

我有一个数据输入表单,用户可以在其中输入DateFrom和DateTo字段。

this

我想构建一个Linq查询,只有在没有提供输入的情况下才会检索前100条记录。

如果用户提供DateFrom并且不提供DateTo,则用户将选择大于DateFrom的数据,直到DateTime.Now。

如果用户提供DateTo并且不提供DateFrom,则用户将选择小于DateTo的数据。

我现在有以下内容:

function

我不确定如何将Applicant applicant = new Applicant();附加到&#34; 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" /> &#34;声明有整个查询。

这里的方法是什么?

2 个答案:

答案 0 :(得分:1)

您应该只能使用错误日志的IQueryable结果,然后为if语句执行lambda表达式。

            List<ErrorLogData> errorLogData = null;
        DateTime dateFrom = Convert.ToDateTime(data.DateFrom);
        DateTime dateTo = Convert.ToDateTime(data.DateTo);


        //IQueryable errorLog
        var errorLog = from ld in logData.errorLogs
                       select new ErrorLogData
                       {
                           ErrorID = ld.errorID,
                           ErrorTime = ld.errorTime,
                           UserName = ld.username,
                           ErrorType = ld.errorType,
                           Error = ld.error,
                           ControlNumber = ld.controlNumber
                       };



        if (data.DateFrom == "" && data.DateTo == "")
        {
            errorLogData = errorLog.Take(10000);
        }

        if (data.DateFrom == "" && data.DateTo != "")
        {
            errorLogData = errorLog.where(x => x.ErrorTime <= dateTo).ToList();
            //query += "from ld in logData.errorLogs where ld.errorTime <= " + data.DateTo;
        }

        //contine to implement If


        return errorLogData;

答案 1 :(得分:1)

假设您正在使用某种LINQ数据访问技术,请使用以下内容:

private List<Entity> GetData(DateTime? dateFrom, DateTime? dateTo)
{
    IQueryable<Entity> query = ...; //Here reference your table

    if (dateFrom == null && dateTo == null)
    {
        query = query.Take(100);
    }
    else
    {
        DateTime dateToValue = dateTo ?? DateTime.Now;

        query = query.Where(x => x.Date <= dateToValue);

        if (dateFrom != null)
        {
            query = query.Where(x => x.Date >= dateFrom.Value);
        }
    }

    return query.ToList(); //This will actually execute the query. Here you can expand your query to select specific columns before executing ToList
}