我有一个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();
感谢您提供解决方案的任何帮助。
由于
答案 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
。
此外,它使代码更易于管理,并且可以更具可读性。