【问题标题】:How can I join a list of employees and genders using linq如何使用 linq 加入员工和性别列表
【发布时间】:2018-08-28 17:11:25
【问题描述】:

我已检索到员工列表。我的员工类别列(employeeId、lastname、genderid)

 List<m_employees> Items = new List<m_employees>
                    {
                        new m_employees{ employeeid = 1, lastname = "mike", genderid = 1 },
                        new m_employees{ employeeid = 2, lastname = "jeni", genderid = 2 }
                    };

然后我有我的性别类列(id,title)

    List<m_genders> genders = new List<m_genders>
                {
                    new m_genders{ id = 1, title = "Male" },
                    new m_genders{ id = 2, title = "Female" }
                };

//then i tried joining the retrieved list of employees to the genders

var x = from emp in Items
                    join sex in genders
                    on emp.genderid equals sex.id
                    into a from b in a.DefaultIfEmpty(new m_genders())
                    select new
                    {
                        emp.lastname,
                        emp.genderid,
                        sex = b.title
                    };

红色错误行显示给关键字 join 并显示“join 子句中的表达式类型不正确...”

我怎样才能正确加入他们?

【问题讨论】:

  • 完成。它只是一个员工列表
  • 请发布 m_employees 和 m_ge​​nders 课程。
  • 您的代码运行良好!在这里查看:dotnetfiddle.net/7geOVL
  • 错误信息告诉你m_genders.idm_employees.genderid不是兼容的类型。由于上面不是这种情况,我很确定这个示例代码与真实代码不同。也许您将 int 用于一个,而将 string 用于另一个。然后你要么必须改变它,要么使用int.Parseint.ToString 使它们兼容。

标签: c# linq


【解决方案1】:

这是因为 emp.genderid、sex.id 类型不同,您需要像这样显式地转换或转换它们:

(int)emp.genderid equals sex.id

我能够使用以下类定义重现错误:

class m_genders
{
    public int id { get; set; }
    public string title { get; set; }

}

class employee
{
   public int id;
   public uint genderid;
   public string lastname { get; set; }
}

【讨论】:

  • 哇!你说对了!你是对的!! m_genders.id 默认为 uint,因为它是主键并且从性别表中自动递增
【解决方案2】:

你的问题不清楚,代码没有任何问题:

namespace WindowsFormsApp1
{
    public class m_genders
    {
        public int id;
        public string title;
    }

    public class m_employees
    {
        public int employeeid { get; set; }
        public int genderid { get; set; }
        public string lastname { get; set; }

    }

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            List<m_genders> genders = new List<m_genders>
            {
                new m_genders {id = 1, title = "Male"},
                new m_genders {id = 2, title = "Female"}
            };

            List<m_employees> Items = new List<m_employees>
            {
                new m_employees{ employeeid = 1, lastname = "mike", genderid = 1 },
                new m_employees{ employeeid = 2, lastname = "jeni", genderid = 2 }
            };


            var x = from emp in Items
                join sex in genders
                    on emp.genderid equals sex.id
                    into a
                from b in a.DefaultIfEmpty(new m_genders())
                select new
                {
                    emp.lastname,
                    emp.genderid,
                    sex = b.title
                };
        }
    }
}

【讨论】:

  • 我尝试使用镜像类(我创建了一个 Employee 类,而不是自动生成的 m_employees 和 m_ge​​nders,它工作正常。所以问题出在自动生成的类中
猜你喜欢
  • 2019-05-20
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 2017-06-09
相关资源
最近更新 更多