如何在foreach循环中从LINQ查询获取数组多值?自定义类转换报错
解决LINQ查询结果存入自定义类数组的问题
嘿,我明白你遇到的麻烦了!错误提示“无法将泛型自定义类转换为我的自定义类”,通常是因为你混淆了单个自定义类对象和自定义类的集合/数组的类型。咱们一步步来解决:
核心问题分析
你当前的代码里,Result是List<Apps>(因为你用了ToList()),如果直接把它赋值给一个Apps类型的变量(单个对象),就会触发类型不匹配的错误。正确的做法是把它转成Apps[]类型的数组,或者确保变量声明是数组类型。
修正后的代码示例
方式1:直接将LINQ查询结果转成数组(最简洁)
var userName = HttpContext.Current.User.Identity.Name; // 先获取当前用户,记得判空避免空引用异常 var currentUser = entities.USERS.SingleOrDefault(x => x.USER_NAME.Equals(userName, StringComparison.OrdinalIgnoreCase)); Apps[] appArray = null; if (currentUser != null) { // 直接用ToArray()把查询结果转成自定义类数组 appArray = entities.Apps.Where(p => p.USERID == currentUser.USERID).ToArray(); }
方式2:在foreach循环中处理后存入数组(适合需要额外逻辑的场景)
如果你需要在foreach里对每个Apps对象做额外处理,再存入数组,可以先收集到List,最后转成数组:
var userName = HttpContext.Current.User.Identity.Name; var currentUser = entities.USERS.SingleOrDefault(x => x.USER_NAME.Equals(userName, StringComparison.OrdinalIgnoreCase)); List<Apps> appList = new List<Apps>(); if (currentUser != null) { foreach (var app in entities.Apps.Where(p => p.USERID == currentUser.USERID)) { // 这里可以添加自定义处理逻辑,比如修改app的属性 // app.SomeProperty = "处理后的值"; appList.Add(app); } // 把List转成数组 Apps[] appArray = appList.ToArray(); }
关键注意事项
- 数组声明要正确:必须是
Apps[](自定义类的数组),而不是Apps(单个对象) - 一定要判空:
SingleOrDefault可能返回null,所以在使用currentUser.USERID之前要检查currentUser是否不为null - 避免冗余操作:如果不需要foreach里的额外处理,直接用
ToArray()比ToList()再转数组更高效
内容的提问来源于stack exchange,提问作者Anshul Khare
相关产品推荐
相关产品推荐

