代码之家  ›  专栏  ›  技术社区  ›  Cindy Conway

LINQ忽略where子句,方法语法为[重复]

  •  -7
  • Cindy Conway  · 技术社区  · 7 年前

    如果用户为这些值提供输入,我需要将where子句添加到查询中。到目前为止,我试图使用follow,但忽略了where子句。我的意思是,只有姓氏以刘易斯开头的学生应该被退回,但我并没有因此得到答案。

                var query = db.STUDENT
                .Where(x => x.STUDENT_CHANGE_IND == null);
    
            if (!string.IsNullOrEmpty(lastName)) query.Where(x => x.STUDENT_LAST_NAME.StartsWith("Lewis"));
            if (!string.IsNullOrEmpty(firstName)) query.Where(x => x.STUDENT_FIRST_NAME.StartsWith(firstName));
            if (!string.IsNullOrEmpty(spridenId)) query.Where(x => x.STUDENT_ID.Contains(spridenId));
    
            var y = query.Take(10).ToList();
    

    我得到的结果是:

    Student ID LastName
    
    002 GUAR - HEMAR    
    021 GUAR - Citibank SLC 
    08092017    DO NOT USE 92 number mess up    
    099 GUAR - ChaseJPM 
    161 GUAR - WELLSG   
    191 GUAR - TERI 
    
    2 回复  |  直到 7 年前
        1
  •  7
  •   Dennis_E    7 年前

    你需要说

    query = query.Where(x => x.STUDENT_LAST_NAME.StartsWith("Lewis"));
    

    而不仅仅是

    query.Where(x => x.STUDENT_LAST_NAME.StartsWith("Lewis"));
    
        2
  •  2
  •   Matt Hensley    7 年前

    如果在单独的操作中调用Where子句,则它们不会堆叠。每次执行Where()语句时,您都需要保存新结果,以确保您使用的是过滤列表。

    更新后的逻辑如下所示:

    var query = db.STUDENT.Where(x => x.STUDENT_CHANGE_IND == null);
    
    if (!string.IsNullOrEmpty(lastName))
    {
        query = query.Where(x => x.STUDENT_LAST_NAME.StartsWith("Lewis"));
    }
    if (!string.IsNullOrEmpty(firstName))
    {
        query = query.Where(x => x.STUDENT_FIRST_NAME.StartsWith(firstName));
    }
    if (!string.IsNullOrEmpty(spridenId))
    {
        query = query.Where(x => x.STUDENT_ID.Contains(spridenId));
    }
    
    var y = query.Take(10).ToList();