[英]Linq one-to-many Union
我正在使用asp.net C#和VS2012 Express开发MVC Web应用程序。
我有一个表( Organizations
)与另外两个表( Comments
和Proposals
)具有一对多关系。 这三个表都包含一个OrganizationID
字段来维护关系。 所有三个表都有一个AddedBy
字符串字段。
我想找到所有位于Organization.AddedBy="Joe"
或Comments.AddedBy="Joe"
或Proposals.AddedBy="Joe"
。
这些查询会进行联接,但是我正在寻找仅包含Organizations' fields
。
// Find organizations created by this person.
IQueryable<Organization> org = from m in context.Organizations
where m.AddedBy.Equals("Joe")
select m;
// Find Comments created by this person.
IQueryable<Comment> comment = from m in context.Comments
where m.AddedBy.Equals("Joe")
select m;
// Join our two queries.
IQueryable<Comment> organizations = (from item in org
join c in comment on item.OrganizationID equals c.OrganizationID
select item).Distinct();
// Find Proposals created by this person.
IQueryable<Proposal> proposal = from m in context.Proposals
where m.AddedBy.Equals("Joe")
select m;
// Join our two queries.
organizations = (from item in organizations
join c in proposal on item.OrganizationID equals c.OrganizationID
select item).Distinct();
谢谢你的帮助。
如果您使用的是实体框架,则可以执行以下任一操作:
var orgs = context.Organizations
.Where(O => O.AddedBy.Equals("Joe") ||
O.Comments.Any(C => C.AddedBy.Equals("joe")) ||
O.Proposals.Any(P => P.AddedBy.Equals("joe")));
作为EF维护带有导航属性的父子关系。
希望这会有所帮助!
因此,您正在寻找三种不同的组合。 只需查询这三件事,然后使用Union
组合它们:
string user = "Joe";
var addedOrganizations = context.Organizations.Where(org => org.AddedBy == user);
var orgsWithUsersComments = from org in context.Organizations
join c in context.Comments
on org.OrganizationID equals c.OrganizationID
where c.AddedBy == user
select org;
var orgsWithUsersProposals = from org in context.Organizations
join p in context.Proposals
where p.AddedBy == user
select org;
var combinedResults = addedOrganizations.Union(orgsWithUsersComments)
.Union(orgsWithUsersProposals);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.