简体   繁体   English

在另一个linq查询中使用结果linq查询

[英]Using the results linq query in another linq query

Good day! 美好的一天!

Tell me whether it is possible to use the result of a Linq query in another Linq query? 告诉我是否可以在另一个Linq查询中使用Linq查询的结果? For example: 例如:

    List<Member> memberList = db.Members.Where(m=>m.Year == 20013).ToList();
var result = (from members in memberList
             from documents in Archive.Where(d=>d.MemberId = members.Id).DefaultIfEmpty()
             select new ArchiveRecord
             {
                member = members,
                documentId = documentsId
             }).ToList();

At the same time the implementation of the second request falls with the error (There is already an open DataReader associated with this Command which must be closed first). 同时,第二个请求的实现因错误而落空(已经存在与此Command相关联的打开的DataReader,必须首先关闭它)。

Please tell me where I made mistakes. 请告诉我我在哪里犯错。

Thank you! 谢谢!

I don't know how to make nested linq query but i have solution for you. 我不知道如何进行嵌套的linq查询,但我为您提供解决方案。 Try this: 尝试这个:

List<Member> memberList = db.Members.Where(m => m.Year == 20013).ToList();
var membersIds = memberList.Select(m => m.Id);
var result = (from documents in Archive.Where(d => membersIds.Contains(d.MemberId)).DefultIfEmpty()
             select new ArchiveRecord
             {
                 member = members,
                 documentId = documentsId
              }).ToList();

在您的连接字符串中启用多个活动结果集(“ MultipleActiveResultSets = True”): https : //msdn.microsoft.com/zh-cn/library/h32h3abf(v =vs.110) .aspx

I believe this should work (Single query): 我相信这应该工作(单个查询):

var memberList = db.Members.Where(m=>m.Year == 20013);
var result = (from members in memberList
         from documents in Archive.Where(d=>d.MemberId = members.Id).DefaultIfEmpty()
         select new ArchiveRecord
         {
            member = members,
            documentId = documentsId
         }).ToList();

This definitely should work (Single query): 这绝对应该工作(单个查询):

var result = (from members in db.Members
         from documents in Archive.Where(d=>d.MemberId = members.Id).DefaultIfEmpty()
         where members.year == 20013
         select new ArchiveRecord
         {
            member = members,
            documentId = documentsId
         }).ToList();

and this (Two queries): 这(两个查询):

var membersIds = db.Members
  .Where(m => m.Year == 20013)
  .Select(m => m.Id)
  .ToList();

var result = (from documents in Archive.Where(d => membersIds.Contains(d.MemberId)).DefultIfEmpty()
             select new ArchiveRecord
             {
                 member = members,
                 documentId = documentsId
              }).ToList();

and this assuming you have created a navigation property on members to archive, and it is a 1-many relationship (Single query): 并假设您已在要存档的成员上创建了导航属性,并且这是一对多关系(单个查询):

var result=db.Archives
  .Where(a=>a.Member.Year==20013)
  .Select(a=> new ArchiveRecord {
    member=a.Member,
    documentId=a.documentsId
  }).ToList();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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