c# - SQL 搜索多个列的多个值列表

标签 c# sql .net sql-server dapper

我可能有一个稍微幼稚的问题,但我以前从未使用过数据库。我是一名 .NET 工程师,我使用 Dapper 访问 SQL Server 数据库。

情况如下:我有一个非规范化表,用于保存多种类型的实体。每一个都有一个组合键(type,id,owner_id),键的每一行都是字符串类型(但不重要)。而且,比方说,我正在将不同用户的许多兴趣写入数据库(批量发布)。为了让它们不重复,我需要进行查询并确定哪些已经存在于数据库中。

所以,我的 InterestService 类中有这段代码:

private IEnumerable<Interest> GetAlreadyExistingInterestsFor(IEnumerable<Interest> interestsForCreating) =>
    _interestRepository.GetInterests(interestsForCreating.Select(interest => interest.Id).ToList(),
                                     interestsForCreating.Select(interest => interest.UserId).ToList());

之后我有一些逻辑等等。这并不重要。

InterestRepository 方法 GetInterests 如下所示:

public GetInterests(IList<string> interestIds, IList<string> userIds) 
{
    var query = @"SELECT type, id, owner_id
                  FROM entities
                  WHERE type = 'interest'
                   AND id IN @InterestIds
                   AND owner_id IN @UserIds";
    return _dbContext.ExecuteQuery(query, new { InterestIds = interestIds, UserIds = userIds });
}

代码可能有错误,因为现在我无法访问工作环境,但我认为这个想法很清楚。所以,问题是这是否是进行查询的最佳方法。如果有更好的,那是什么。

最佳答案

本质上,您可以简单地执行本文中所做的操作,但表值参数使用两组而不是一组。 Using Dapper, how do I pass in the values for a sql type as param?

它使用存储过程和 sql 表值参数。

关于c# - SQL 搜索多个列的多个值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52727672/

相关文章:

c# - 接口(interface)声明和通用约束

SQL - 对公共(public)表表达式进行排序

sql - PostgreSQL 在 3 个表上使用 JOIN 更新列

c# - VB 与 C# — CType 与 ChangeType

c# - 使用 npgsql 在 C# 中插入

c# - 试图加载格式不正确的程序。 Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader

c# - 如何在 ASP.NET Core 中间件中获取传入请求正文和传出响应正文?

sql - 从 Virtual PC 连接到 SQL 服务器

c# - 聚合根在逻辑和性能上的冲突

c# - Azure Functions 无法再创建 .NET Framework 运行时