如何在 LINQWhere 子句中搜索集合的集合?

发布于 2024-07-17 07:04:42 字数 766 浏览 6 评论 0原文

我有以下 ADO.NET 实体框架实体数据模型:

ADO.NET 实体数据模型

我想找到所有具有给定 ID 的服务和给定状态的关键字的保单持有人。

此 LINQ 不起作用:

Dim ServicesId As Integer = ...
Dim KeywordStatus As Integer = ...

Dim FoundPolicyholders = From p As Policyholder In db.PolicyholderSet.Include("Keywords").Include("Services") _
                         Where p.Services.Id = ServicesId _
                         And p.Keywords.Status = KeywordStatus _
                         Select p

Where 子句无法以这种方式搜索 p.Services 和 p.Keywords EntityCollections。

“Id”不是以下成员的成员 'System.Data.Objects.DataClasses.EntityCollection(Of ....服务)'。

执行我想要的操作的正确 LINQ 语法是什么?

I've got the following ADO.NET Entity Framework Entity Data Model:

ADO.NET Entity Data Model

I want to find all the Policyholders with both a Service of a given Id and also a Keyword of a given Status.

This LINQ Does Not Work:

Dim ServicesId As Integer = ...
Dim KeywordStatus As Integer = ...

Dim FoundPolicyholders = From p As Policyholder In db.PolicyholderSet.Include("Keywords").Include("Services") _
                         Where p.Services.Id = ServicesId _
                         And p.Keywords.Status = KeywordStatus _
                         Select p

The Where clause cannot search the p.Services and p.Keywords EntityCollections in that way.

'Id' is not a member of
'System.Data.Objects.DataClasses.EntityCollection(Of
....Service)'.

What is the correct LINQ syntax to do what I want?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷血 2024-07-24 07:04:42
db.PolicyholderSet.Where(ph =>
   ph.Services.Any(s => s.Id == someId) &&
   ph.Keywords.Any(kw => kw.Status == someStatus))

为什么你的查询不起作用? 因为 p.Servicesp.KeywordsServiceKeyword 集合 - 它们没有属性 IdStatus 因此您不能使用 p.Services.Idp.Keywords.Status

视觉基础...

Dim FoundPolicyholders = From p As Policyholder In db.PolicyholderSet.Include("Keywords").Include("Services") _
                         Where p.Services.Any(Function(s) s.Id = ServicesId) _
                         And p.Keywords.Any(Function(k) k.Status = KeywordStatus) _
                         Select p
db.PolicyholderSet.Where(ph =>
   ph.Services.Any(s => s.Id == someId) &&
   ph.Keywords.Any(kw => kw.Status == someStatus))

Why does your query not work? Because p.Services and p.Keywords are a Service and a Keyword collection - they have not property Id or Status hence you cannot use p.Services.Id or p.Keywords.Status.

Visual Basic…

Dim FoundPolicyholders = From p As Policyholder In db.PolicyholderSet.Include("Keywords").Include("Services") _
                         Where p.Services.Any(Function(s) s.Id = ServicesId) _
                         And p.Keywords.Any(Function(k) k.Status = KeywordStatus) _
                         Select p
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文