Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF Core-FromSql在参数化数字集合时抛出无效数字_C#_Oracle_Entity Framework_Entity Framework Core_Grpc - Fatal编程技术网

C# EF Core-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

我正在使用EntityFrameworkCore并尝试将整数集合转换为字符串,然后将字符串作为参数传递给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;

为什么会出现这种情况,如何将整数集合作为参数?

问题是,形成的查询将类似于下面的内容。请注意,您试图作为一个集合传入的实际上只是一个字符串,其中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
                    });