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

本文关键字:linq 查询 结果 另一个 | 更新日期: 2023-09-27 17:50:53

大家好!

告诉我是否可以在另一个Linq查询中使用Linq查询的结果?例如:

    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();

同时,第二个请求的实现因错误而失败(已经有一个与此命令相关的打开的数据读取器必须先关闭)。

请告诉我哪里错了。

谢谢!

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

我不知道如何使嵌套linq查询,但我有你的解决方案。试试这个:

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/en-us/library/h32h3abf (v = vs.110) . aspx

我相信这应该工作(单个查询):

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();

这绝对应该工作(单个查询):

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();

和this(两个查询):

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();

假设您已经在要存档的成员上创建了导航属性,并且它是一个1-多关系(单个查询):

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