C# EF Core-FromSql在参数化数字集合时抛出无效数字
我正在使用EntityFrameworkCore并尝试将整数集合转换为字符串,然后将字符串作为参数传递给FromSql函数 下面是我的问题的一个简单例子:C# EF Core-FromSql在参数化数字集合时抛出无效数字,c#,oracle,entity-framework,entity-framework-core,grpc,C#,Oracle,Entity Framework,Entity Framework Core,Grpc,我正在使用EntityFrameworkCore并尝试将整数集合转换为字符串,然后将字符串作为参数传递给FromSql函数 下面是我的问题的一个简单例子: IQueryable<Equipment> query = _context.Set<Equipment>(); const string s = "150999, 720045, 720046"; IQueryable<SignalGantryEquipment> filtered
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;
为什么会出现这种情况,如何将整数集合作为参数?问题是,形成的查询将类似于下面的内容。请注意,您试图作为一个集合传入的实际上只是一个字符串,其中Oracle DB提供程序正在导出一组数字,我假设为int 从“150999、720045、720046”中id所在的设备中选择id、名称 这里有一个选项,如果您不介意全速运行Linq: var idList=新列表{150999,720045,720046}; //对下面的财产名称进行一些猜测 //另外-将设备类型与名为equipmentId的变量进行比较是否正确? return\u context.Set .e=>idList.Containse.Id和&e.EquipmentType==equipmentId 托利斯特先生;
问题是,形成的查询如下所示。请注意,您试图作为一个集合传入的实际上只是一个字符串,其中Oracle DB提供程序正在导出一组数字,我假设为int 从“150999、720045、720046”中id所在的设备中选择id、名称 这里有一个选项,如果您不介意全速运行Linq: var idList=新列表{150999,720045,720046}; //对下面的财产名称进行一些猜测 //另外-将设备类型与名为equipmentId的变量进行比较是否正确? return\u context.Set .e=>idList.Containse.Id和&e.EquipmentType==equipmentId 托利斯特先生;
您必须使用原始SQL吗?如果不是的话,使用Linq可以做很多事情。你必须使用原始SQL吗?如果没有,这可以用Linq做很多。谢谢你的帮助。这使我明白了。在我的情况下,我正在使用的数据库有点混乱,所以我最初认为原始sql会工作得更好。我已经改为LINQ,以你为例,做了一些调整,效果非常好。再次感谢。很高兴听到这个消息!如果我的解决方案对您有效,如果您接受答案左边的复选标记,我将不胜感激。在我个人看来,使用LINQ而不是原始SQL的能力是EF Core最大的优势之一。这是一个学习曲线,但它是一个非常强大的,再次-意见干净的方式建立查询!谢谢你的帮助。这使我明白了。在我的情况下,我正在使用的数据库有点混乱,所以我最初认为原始sql会工作得更好。我已经改为LINQ,以你为例,做了一些调整,效果非常好。再次感谢。很高兴听到这个消息!如果我的解决方案对您有效,如果您接受答案左边的复选标记,我将不胜感激。在我个人看来,使用LINQ而不是原始SQL的能力是EF Core最大的优势之一。这是一个学习曲线,但它是一个非常强大的,再次-意见干净的方式建立查询!
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
});