繁体   English   中英

Linq一对多联盟

[英]Linq one-to-many Union

我正在使用asp.net C#和VS2012 Express开发MVC Web应用程序。

我有一个表( Organizations )与另外两个表( CommentsProposals )具有一对多关系。 这三个表都包含一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM