0

在下面的代码中,第一个 LINQ 语句获取了我所有的活跃客户 (c) 并包括他们的访问。后续行执行额外的过滤,但与此问题无关。

在最后一行,我试图将客户限制为那些具有 Visit.Id 等于parsedVisitId但根本无法使这条线工作的客户。我什至无法将任何可以编译的东西放在一起。parsedVisitId是从字符串解析的 int。

如何重写最后一行以仅返回访问 id 等于 parsedVisitId 的客户?

var customers= this.db.Customers.Where(c => c.IsActive).Include(c => c.Visits).AsQueryable();
//
// more filtering stuff happens here...
//
customers= customers.Where(p => p.Visits.Where( v => v.Id == parsedVisitId));
4

1 回答 1

0
customers = customers.Where(p => p.Visits.Any( v => v.Id == parsedVisitId));

使用 Any 而不是 Where on Visits。我希望上面的代码行会有所帮助。

在您的代码中

客户=customers.Where(p => p.Visits.Where(v => v.Id == parsedVisitId));

customers.Where(...) 方法需要一个 lambda 表达式,其参数类型为 Customer 和 ReturnType bool 但您的 lambda 表达式

p.Visits.Where(v => v.Id == parsedVisitId)

返回类型

IEnumerable<Visit>

因此它不起作用。我想知道它是如何编译的。

于 2012-07-16T16:49:48.880 回答