无法将类型系统 linq IQueryable 隐式转换为系统集合泛型 List

2023-12-05

无法从视图模型控制器获取数据到视图,我已正确检查 LINQpad 中查询的工作情况。但是我缺少可以在视图中显示的查询输出的转换。

我有三个数据模型产品、图像、规格,我将它们合并到仅具有选定属性的 ViewModel 中,并希望显示相同的内容。

 public class ViewModelController : Controller
    {
        private OMSEntities db = new OMSEntities();
        // GET: ViewModel
        public ActionResult Index()
        {
            var product = new Product();
            var prices = new Price();
            var orders = new Order();
           ProductRegistrationViewModelVM  vm = new ProductRegistrationViewModelVM();

           vm =(from p in db.Products
                       join i in db.Images on p.ProductId equals i.Product_Id
                       join s in db.Specifications on p.ProductId equals s.Product_Id
                       select new
                       {
                           //Product
                           p.Name,
                           p.Produt_Code,
                           p.Description,
                           //Image
                           i.Image_Description,
                           i.Image_Name,
                           i.image1,
                           //Specifications
                           s.Sz_Measurement_Unit,
                           s.Size,
                           s.Wg_Measurement_Unit,
                           s.Weight,
                           s.Price_Set,
                           s.Price_Sold
                       });

          vm.Add(new ProductRegistrationViewModelVM());

            return View(vm.ToList());
        }

视图模型类

 public class ProductRegistrationViewModelVM
    {
        //Products
        public int ProductId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string Produt_Code { get; set; }
        public Nullable<int> Supplier_Id { get; set; }
        public IEnumerable<Supplier> Supplier { get; set; }
        //Image
        public string Image_Description { get; set; }
        public string Image_Name { get; set; }
        public byte[] image1 { get; set; }

        //Specifications

        public string Sz_Measurement_Unit { get; set; }
        public Nullable<decimal> Size { get; set; }
        public string Size_Name { get; set; }
        public string Wg_Measurement_Unit { get; set; }
        public Nullable<decimal> Weight { get; set; }

        public Nullable<int> Price_Set { get; set; }
        public Nullable<int> Price_Sold { get; set; }


    }

Note:我确实研究了堆栈溢出中的相同错误问题但是无法弄清楚。

错误CS0266无法隐式转换类型'System.Linq.IQueryable >' 到 'OMS.ViewModels.ProductRegistrationViewModelVM'。存在显式转换(您是否缺少强制转换?)

Fix:

如下所示,ProductRegistrationViewModelVM 被制作为列表项,并且 ViewModel 属性也绑定到查询属性。

 public ActionResult Index()
        {
            var product = new Product();
            var prices = new Price();
            var orders = new Order();
            List<ProductRegistrationViewModelVM> vm = new List<ProductRegistrationViewModelVM>();
           vm= (from p in db.Products
                        join i in db.Images on p.ProductId equals i.Product_Id
                        join s in db.Specifications on p.ProductId equals s.Product_Id
                        select new ProductRegistrationViewModelVM()
                   {
                       //Product
                       Name=p.Name,
                       Produt_Code=   p.Produt_Code,
                       Description = p.Description,
                            //Image
                            Image_Description=  i.Image_Description,
                            Image_Name= i.Image_Name,
                            image1= i.image1,
                       //Specifications
                       Sz_Measurement_Unit= s.Sz_Measurement_Unit,
                            Size= s.Size,
                            Wg_Measurement_Unit=s.Wg_Measurement_Unit,
                            Weight=s.Weight,
                            Price_Set=s.Price_Set,
                            Price_Sold= s.Price_Sold
                   }).ToList();

            return View(vm);
        }

扩展方法.Select将返回一个IEnumerable<TResult>,但是您试图将它们分配给类型的业务对象ProductRegistrationViewModelVM这样的分配是无效的,你可以改变类型vm to var或者您必须将其设置为列表,如果是这样,查询将如下所示:

List<ProductRegistrationViewModelVM> vm =(from p in db.Products
                   join i in db.Images on p.ProductId equals i.Product_Id
                   join s in db.Specifications on p.ProductId equals s.Product_Id
                   select new ProductRegistrationViewModelVM
                   {
                       //Product
                       p.Name,
                       p.Produt_Code,
                       p.Description,
                       //Image
                       i.Image_Description,
                       i.Image_Name,
                       i.image1,
                       //Specifications
                       s.Sz_Measurement_Unit,
                       s.Size,
                       s.Wg_Measurement_Unit,
                       s.Weight,
                       s.Price_Set,
                       s.Price_Sold
                   }).ToList();

现在您可以轻松添加另一个类型的对象ProductRegistrationViewModelVM因为它是相同类型的列表。作为回报,你也应该做一些小小的改变。如下所示;

return View(vm); // No ToList is needed here since it is already a list
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法将类型系统 linq IQueryable 隐式转换为系统集合泛型 List 的相关文章

  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 自定义错误页面未显示

    由于某种原因 当我收到 ASP NET 运行时错误时 它不会加载我的自定义错误页面
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框

随机推荐