EF Core-参数化数字集合时FromSql抛出无效数字

克雷格·马丁

我正在使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章