1

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

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

谢谢

4

1 回答 1

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

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

于 2013-10-08T13:20:42.627 回答