You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定用户积分求和的SQL转为带动态条件的LINQ查询?

没问题,这就给你两种常用的实现方式,都能完美支持动态传入用户ID的需求,而且和你给出的SQL逻辑完全对应:

前提说明

假设你用的是Entity Framework(Core),已经在DbContext里定义了对应的数据集合:

public class YourDbContext : DbContext
{
    public DbSet<ScoredPointModel> ScoredPoints { get; set; }
    // 其他DbSet和配置...
}

方式1:类SQL的查询语法

这种写法和原生SQL结构最接近,容易理解:

public int CalculateTotalPoints(int targetUserId)
{
    using (var dbContext = new YourDbContext())
    {
        var total = (from pointRecord in dbContext.ScoredPoints
                     where pointRecord.UserId == targetUserId
                     select pointRecord.ScoredPoints)
                    .Sum();
        return total;
    }
}

方式2:方法链语法(更简洁)

如果喜欢更紧凑的写法,方法链风格会更顺手:

public int CalculateTotalPoints(int targetUserId)
{
    using (var dbContext = new YourDbContext())
    {
        return dbContext.ScoredPoints
                       .Where(record => record.UserId == targetUserId)
                       .Sum(record => record.ScoredPoints);
    }
}

几个关键细节:

  • targetUserId就是你要动态传入的用户ID(来自用户输入的任意值),直接传进去就行,LINQ会自动做参数化处理,避免SQL注入风险,比直接拼接SQL安全太多。
  • 对应你原来的SQL:WHERE UserId = 121变成了Where(record => record.UserId == targetUserId),SUM(POINTS)对应Sum(record => record.ScoredPoints),逻辑完全一致。
  • 如果是在内存集合里处理(不是数据库),写法也完全一样,比如你有一个List<ScoredPointModel>的本地数据:
// 示例:本地集合的LINQ查询
List<ScoredPointModel> localPoints = new List<ScoredPointModel>
{
    new ScoredPointModel { UserId = 121, ScoredPoints = 5 },
    new ScoredPointModel { UserId = 122, ScoredPoints = 6 },
    // 其他数据...
};

int inputUserId = 121; // 这里可以替换成用户输入的ID
int total = localPoints.Where(r => r.UserId == inputUserId).Sum(r => r.ScoredPoints);

内容的提问来源于stack exchange,提问作者nischalinn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:37:45