我可能有一个稍微幼稚的问题,但我以前从未使用过数据库。我是一名 .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/