包含在LINQ查询和检查非空

时间:2013-10-08 12:56:35

标签: c# linq

我有一个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();

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

由于

1 个答案:

答案 0 :(得分: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

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