我正在使用Entity Framework Core,并尝试将整数的集合转换为字符串,然后将字符串作为参数传递给FromSql
函数。
这是我的问题的简单示例:
IQueryable<Equipment> query = _context.Set<Equipment>();
const string s = "150999, 720045, 720046";
IQueryable<SignalGantryEquipment> filteredSignalGantryEquipments
= query.FromSql("select id, name from equipment " +
"where id in ({0}) and type = {1} " +
"order by name", s, equipmentId)
.Select(x => new Equipment
{
Id = x.Id,
Name = x.Name
});
return filteredSignalGantryEquipments;
我期望上面的代码可以工作。但是,出现以下错误:
问题与我测试过的字符串100%有关equipmentId
。
我发现非常奇怪的是,如果我删除字符串s作为参数,并将值硬编码到适当的位置,则可以正常工作而没有错误。
IQueryable<SignalGantryEquipment> filteredSignalGantryEquipments
= query.FromSql("select id, name from signal_gantry_equipment " +
"where id in (150999, 720045, 720046) and equipment_type = {0} " +
"order by name", equipmentId)
.Select(x => new SignalGantryEquipment
{
Id = x.Id,
Name = x.Name
});
为什么会这样,如何将整数集合作为参数?
问题在于,形成的查询将如下所示。请注意,您试图作为集合传递的实际上只是一个字符串,Oracle DB提供程序正在其中接收一组数字(我假设int
是s)。
select id, name from equipment where id in ('150999, 720045, 720046')...
如果您不介意使用完整的Linq,可以使用以下方法:
var idList = new List<int>(){ 150999, 720045, 720046 };
// making some guesses on property names below
// also - is it correct to be comparing equipment type to variable named equipmentId?
return _context.Set<Equipment>()
.Where(e => idList.Contains(e.Id) && e.EquipmentType == equipmentId)
.ToList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句