Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 无法强制转换类型'System.Linq.IGrouping`2[[System.Decimal]_C#_Entity Framework_Linq_Azure_Azure Sql Database - Fatal编程技术网

C# 无法强制转换类型'System.Linq.IGrouping`2[[System.Decimal]

C# 无法强制转换类型'System.Linq.IGrouping`2[[System.Decimal],c#,entity-framework,linq,azure,azure-sql-database,C#,Entity Framework,Linq,Azure,Azure Sql Database,在我的webApi2服务中,我使用实体框架作为orm,Linq作为查询语言后端作为azure sql。 我的DTO类来映射我的查询结果 public class RTLSLevelZonesInfoDTO { public List<int> L1 { get; set; } public List<int> L2 { get; set; } public List<int> L3 { get; set; } public R

在我的webApi2服务中,我使用实体框架作为orm,Linq作为查询语言后端作为azure sql。 我的DTO类来映射我的查询结果

public class RTLSLevelZonesInfoDTO
{
    public List<int> L1 { get; set; }
    public List<int> L2 { get; set; }
    public List<int> L3 { get; set; }

    public RTLSLevelZonesInfoDTO()
    {

        L1 = new List<int>();

        L2 = new List<int>();
        L3 = new List<int>();

    }
}
我的查询用于填充数据

var leveZones =  (from s in db.RTLS_SpotLevelMap
                        group s by s.Level_no
                        into g
                        select new RTLSLevelZonesInfoDTO
                        {
                            L1 = (g.Key == 1) ? (List<int>)g: convertedLocationArray,
                            L2 = (g.Key == 2) ? (List<int>)g : convertedLocationArray,
                            L3 = (g.Key == 3) ? (List<int>)g : convertedLocationArray

                        }).FirstOrDefault();
上面的查询获取属于特定级别的ZoneID,在我的数据库中只有3个固定级别,如下图所示

在执行代码后,我被捕获到一个异常,消息是

无法强制转换类型“System.Linq.IgGrouping2[[System.Decimal, mscorlib,版本=4.0.0.0,区域性=中性, PublicKeyToken=b77a5c561934e089],[RTLSWebService.Models.RTLS\u DB.RTLS\u SpotLevelMap, RTLSWebService,版本=1.0.0.0,区域性=中性, PublicKeyToken=null]]”以键入 'System.Collections.Generic.List`1[[System.Int32,mscorlib, Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]'。 LINQ to实体仅支持强制转换EDM基元或枚举 类型

试着这样做:

var leveZones =  (from s in db.RTLS_SpotLevelMap
                    group s by s.Level_no
                    into g
                    select new RTLSLevelZonesInfoDTO
                    {
                        L1 = (g.Key == 1) ? g.ToList(): convertedLocationArray,
                        L2 = (g.Key == 2) ? g.ToList() : convertedLocationArray,
                        L3 = (g.Key == 3) ? g.ToList() : convertedLocationArray

                    }).FirstOrDefault();

最后,我通过对每个列表进行单独查询得到了解决方案

  var levelZones = new RTLSLevelZonesInfoDTO();

  var l1 = await ((db.RTLS_SpotLevelMap.Where(p => p.Level_no == 1)).Select(q => (int)q.zone_id)).ToListAsync();
  var l2 = await ((db.RTLS_SpotLevelMap.Where(p => p.Level_no == 2)).Select(q => (int)q.zone_id)).ToListAsync();
                        var l3 = await ((db.RTLS_SpotLevelMap.Where(p => p.Level_no == 3)).Select(q => (int)q.zone_id)).ToListAsync();

  levelZones.L1 = l1;
  levelZones.L2 = l2;
  levelZones.L3 = l3;
这个怎么样

var lookup = db.RTLS_SpotLevelMap.ToLookup(s => s.Level_no, s => s.ZoneId);
new RTLSLevelZonesInfoDTO
{
    L1 = lookup[1].ToList(),
    L2 = lookup[2].ToList(),
    L3 = lookup[3].ToList()
};

g属于IGrouping类型,您试图将其强制转换为List,错误是不言而喻的。您不了解错误的哪一部分?g属于IGrouping类型。您可能只需要元素,所以只需添加.ToList之类的内容即可摆脱键并将其转换为List。还有一件事:您可能需要重新考虑da中的数据类型tabase.Decimal似乎不适用于ID。向下投票人,请指定向下投票的原因。我已经尝试过它,它给出了编译时错误,因为无法确定条件表达式的类型,因为…之间没有隐式转换。什么是:convertedLocationArray?什么是RTLS_SpotLevelMap的架构?convertedLocationArray是空的y数组和RTLS_SpotLevelMap模式是创建表RTLS_SpotLevelMapzone_id numeric10不为空,Level_no numeric3不为空感谢您的帮助@Piotr我已经通过另一种方法完成了。没问题。我很高兴您成功了;