【问题标题】:LINQ ignoring where clause with method syntax [duplicate]LINQ忽略带有方法语法的where子句[重复]
【发布时间】:2017-11-21 16:03:43
【问题描述】:

如果用户为这些值提供输入,我需要在查询中添加 where 子句。到目前为止,我正在尝试使用以下内容,但忽略了 where 子句。我的意思是只返回姓氏以 Lewis 开头的学生,但结果我没有得到。

            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 

【问题讨论】:

标签: c# linq


【解决方案1】:

你需要说

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

而不仅仅是

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

【讨论】:

  • 哦,伙计。额掌。当然,我必须捕获修改后的值。谢谢!
  • @CindyConway 偶尔会发生在每个人身上 :)
【解决方案2】:

如果在单独的操作中调用 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();

【讨论】:

  • 已编辑,感谢@EdPlunkett
猜你喜欢
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多