【问题标题】:Cannot implicitly convert type 'System.Collections.Generic.List in asp mvc无法在 asp mvc 中隐式转换类型'System.Collections.Generic.List
【发布时间】:2020-11-22 21:02:38
【问题描述】:

我需要用 Linq 加入 4 个表。但它告诉我这个错误:

错误 1 ​​无法将类型 'System.Collections.Generic.List' 隐式转换为 'System.Collections.Generic.List' E:\MyProject\GoKhoda\GoKhoda\Areas\Classes\StudentsFunc.cs 20 20 GoKhoda

这是我的代码:

public List<Tbl_Students> ShowAllStudents()
    {
        var qstudent = from s in _db.Tbl_Students
                       join pr in _db.Tbl_Pye_Reshte on s.StudentID equals pr.StudentID
                       join r in _db.Tbl_Reshte on pr.ReshteID equals r.ReshteID
                       join p in _db.Tbl_Paye on pr.PayeID equals p.PayeID
                       orderby p.PayeID descending
                       select new { StudentName = s.StudentName, StudentFamily = s.StudentFamily, StudentImage = s.StudentImage, StudentPayeName = p.PayeName, StudentReshtName = r.ReshteName };
        return qstudent.ToList();
    }

为什么显示错误?我该如何解决这个问题?

【问题讨论】:

  • 例外情况并没有比我们能告诉你的少很多。

标签: c# string linq generics


【解决方案1】:

使用这个:

var qstudent = from s in _db.Tbl_Students
    join pr in _db.Tbl_Pye_Reshte on s.StudentID equals pr.StudentID
    join r in _db.Tbl_Reshte on pr.ReshteID equals r.ReshteID
    join p in _db.Tbl_Paye on pr.PayeID equals p.PayeID
    orderby p.PayeID descending
    select new Tbl_Students { StudentName = s.StudentName, StudentFamily = s.StudentFamily, StudentImage = s.StudentImage, StudentPayeName = p.PayeName, StudentReshtName = r.ReshteName };
return qstudent.ToList();

Select new { ... } 只会创建一个匿名类型,除了object,它不能转换为任何东西

顺便说一句:您应该考虑根据应用程序中的实体来命名您的类型,在您的示例中为Student,而不是存储实体的表。

【讨论】:

    【解决方案2】:

    匿名类型是 LINQ 查询的返回类型的问题。此匿名类型由编译器根据 select new {} 语句中指定的名称和类型定义。

    要修复它,你可以定义一个新类型 Student

    public class Student
    {
        public string StudentName { get; set; }
        public string StudentFamily { get; set; }
        public byte[] StudentImage { get; set; }
        public string StudentPayeName { get; set; }
        public string StudentReshtName { get; set; }
    }
    

    然后在 LINQ 的 select 语句中使用 Student 类型并作为 ShowAllStudents 方法的返回类型

    public List<Student> ShowAllStudents()
    {
        var qstudent = from s in _db.Tbl_Students
                       join pr in _db.Tbl_Pye_Reshte on s.StudentID equals pr.StudentID
                       join r in _db.Tbl_Reshte on pr.ReshteID equals r.ReshteID
                       join p in _db.Tbl_Paye on pr.PayeID equals p.PayeID
                       orderby p.PayeID descending
                       select new Student { StudentName = s.StudentName, StudentFamily = s.StudentFamily, StudentImage = s.StudentImage, StudentPayeName = p.PayeName, StudentReshtName = r.ReshteName };
        return qstudent.ToList();
    }
    

    【讨论】:

      【解决方案3】:

      使用select 中的模型类代替匿名对象。然后你可以返回List&lt;StudentModel&gt; 而不是List&lt;object&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-07
        • 1970-01-01
        • 1970-01-01
        • 2017-10-06
        • 1970-01-01
        • 1970-01-01
        • 2021-11-22
        相关资源
        最近更新 更多