Linq -循环字符串列表并将结果添加到var变量

huwehgph  于 2022-12-30  发布在  其他
关注(0)|答案(2)|浏览(153)

下面是我的代码示例。

List<string> userIds = userAppService.GetUserIds()
    .Where(usr => usr.Status == "Active")
    .Select(u => u.User_Id)
    .ToList();

现在我想循环通过上述UserId的列表,并将结果添加到var变量。

foreach(string str in userIds)
{
    var result = SLSDBContext.USER_HISTORY
        .Where(i => i.UserId == str)
        .Select(x => new 
        {
            x.UserId,
            x.LogCount,
            x.IsRegistered 
        });

    return this.Json(result)
}

上面的问题是我将无法访问foreach块外部的“result”变量。如果我试图在foreach块之前声明“result”变量,我无法为其分配类型。
有没有更好的方法来达到预期的效果?
我尝试在Linq中使用Any()运算符,但无法获得所需的结果。

var result = SLSDBContext.USER_HISTORY
    .Where(i => i.UserId.Contains(userIds))
    .Select(x => new 
    {
        x.UserId,
        x.LogCount,
        x.IsRegistered 
    });
nafvub8i

nafvub8i1#

您可以使用Join

var activeUsers = userAppService.GetUserIds()
    .Where(usr => usr.Status == "Active");
var result = from uh in SLSDBContext.USER_HISTORY
             join au in activeUsers
                 on uh.UserId equals au.User_Id
             select new {
                 uh.UserId,
                 uh.LogCount,
                 uh.IsRegistered 
             };    

return this.Json(result.ToList());
7jmck4yq

7jmck4yq2#

你可以在循环之前初始化result并使用Concat方法。

var result = Enumerable.Empty<USER_HISTORY>();

foreach(string str in userIds)
{
    result = result.Concat(SLSDBContext.USER_HISTORY.Where(i => i.UserId == str).Select(x => new {
      x.UserId,
      x.LogCount,
      x.IsRegistered 
    }));
}

return this.Json(result);

相关问题