【问题标题】:Contains in LINQ query and Check for Not null包含在 LINQ 查询中并检查 Not null
【发布时间】:2013-10-08 12:56:35
【问题描述】:

我有一个 Linq 查询。在那我使用包含的列表来过滤一些记录。查询需要在任一列表值(100 或 110 或 120)中查找不为空的值。

列出值

List splitted = {"100", "110", "120"}

查询

model = (from line in db.Bibs
         where line.TNo == "245" 
           && (line.NrmVal.StartsWith(Val) || line.NrmVal.Contains(" " + Val))
         select new MyModel
         {
          Author = (from a in db.Bibs 
          where a.BId == line.Bid
            &&  splitted.Contains(a.TNo) 
            &&  a.NrmVal != null 
          select a.NrmVal).FirstOrDefault()
         }).ToList();

感谢您提供解决方案的任何帮助。

谢谢

【问题讨论】:

  • 什么不工作?
  • 执行查询时抛出超时异常。我认为我没有按照正确的方法进行此检查 (a.NrmVal != null).
  • 我们需要更多信息。这是 LINQ to SQL 吗? db.Bibs 的组成部分是什么?您的 null 检查和 id 检查似乎没有必要,但我觉得我们在这里缺少信息。
  • 代码对我来说看起来不错? TimeoutException 似乎更多地与网络延迟有关,而不是您的 LINQ 查询 - 也许它花费的时间太长?
  • 对不起。那实际上是子查询。现在,我更新了我的问题。请立即检查。

标签: c# linq


【解决方案1】:

试试这个等效的 Lambda

var query = db.Bibs.Where(x => x.TNo == "245");
query = query.Where(x => x.NrmVal.StartsWith(Val) || x.NrmVal.Contains(" " + Val));
query = query.Select(x => new {
            Author = db.Bibs.Where(a => a.BId == x.BId && a.NrmVal != null && splitted.Contains(a.TNo)).FirstOrDefault()
        });

如果您仍然遇到同样的问题,那么我会注释掉每个部分,直到您发现哪个部分不起作用。我优化了Author 查询以在查找列表之前首先检查null

此外,它使代码更易于管理,并且更具可读性。

【讨论】:

    猜你喜欢
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 2020-05-09
    相关资源
    最近更新 更多