简体   繁体   English

EF .Net Core Enumerable.Concat无法正常工作

[英]EF .Net Core Enumerable.Concat not working

Below is my code 下面是我的代码

var dbClaimLink = this.Context.Set<ClaimLink>();

var claims = await DbSet
    .Include(claim => claim.Parent)
    .Include(link => link.ParentLinks)
    .ToListAsync();

var newClaimLink = await dbClaimLink.ToListAsync();

var processedClaims = claims.Select(x =>
    {
        var claimLinks = x.ParentLinks;
        if (!claimLinks.Any())
        {
            return x;
        }

        var hiddenParents = claimLinks.Select(p => claims.Find(t => t.Id == p.ClaimLinkId));

        x.HiddenParents = hiddenParents;
        return x;
    });

foreach (var objClaim in processedClaims)
{
    if (objClaim.Children == null)
        objClaim.Children = new List<Claim>();

    var lst = newClaimLink.Where(k=> k.ClaimLinkId == objClaim.Id).ToList();

    if (lst.Any())
    {
        foreach (var item in lst)
        {
            IEnumerable<Claim> newChildren = claims.Where(p => p.Id == item.ClaimId);
            objClaim.Children.Concat(newChildren);
        }
    }
}

it always return old children set without concatenate with new children. 它总是返回没有与新孩子连接的老孩子。 I want to those old and new children set concatenate in side of foreach loop 我想将那些新旧孩子设置在foreach循环的一侧串联

Concat方法将返回具有两个值的新集合,并且不会更改原始集合。

  1. Concat will return new object - result of concatination, so you need to save it somewhere: var result = objClaim.Children.Concat(newChildren); Concat将返回新对象-合并结果,因此您需要将其保存在某个地方: var result = objClaim.Children.Concat(newChildren);
  2. Where is lazy operation, it does not execute in place, only after materialization ( ToArray , or foreach call): claims.Where(p => p.Id == item.ClaimId).ToArray() 延迟操作Where ,仅在实现( ToArrayforeach调用)后才在原地执行: claims.Where(p => p.Id == item.ClaimId).ToArray()

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

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