[英]How do I query a SQL Server database with a list of parameters in Dapper?
我有一个具有各种属性的对象列表。 我想使用这些属性查询数据库并返回结果列表。
这是我尝试过的:
public async Task<IEnumerable<Animal>> GetAnimalsFromAttributesAsync(IEnumerable<AnimalInfo> attributeSets)
{
using (var myDB = new SqlConnection(connectionString))
{
await myDB.OpenAsync();
var results = new List<Animal>();
foreach (var attributeSet in attributeSets)
{
var sql = @"select AnimalID, AnimalTypeID, AnimalColor
from Animals
where AnimalTypeID = @AnimalTypeID
and AnimalColorID = @AnimalColorID";
var result = myDB.Query<Animal>(sql, attributeSet);
results.AddRange(result);
}
return results
}
}
这适用于少量属性。 但是如果我有很多属性,那么我会收到这个错误:
错误:传入的请求参数过多。 服务器最多支持 2100 个参数。 减少参数数量并重新发送请求。
有一个更好的方法吗?
感谢@MarcGravell 的建议,我决定将我的查询重写为 TVP 查询。
查询语句:
create type AnimalInfo as table
(
AnimalTypeID int,
AnimalColorID int
)
go
C#:
public async Task<IEnumerable<Animal>> GetAnimalsFromAttributesAsync(DataTable attributeSets)
{
using (var myDB = new SqlConnection(connectionString))
{
await myDB.OpenAsync();
var sql = @"select AnimalID, AnimalTypeID, AnimalColor
from Animals
inner join @animalInfos animalInfos on
animalInfos.AnimalColorID = Animals.ColorID
and
animalInfos.AnimalTypeID = Animals.AnimalTypeID";
var result = await myDB.QueryAsync<Animal>(sql, new { animalInfos = attributeSets.AsTableValuedParameter("AnimalInfo") };
return result;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.