Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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/8/linq/3.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# 如何使用linq加入员工和性别列表_C#_Linq - Fatal编程技术网

C# 如何使用linq加入员工和性别列表

C# 如何使用linq加入员工和性别列表,c#,linq,C#,Linq,我已检索到一份员工名单。我的员工类列(employeeId、lastname、genderid) List Items=新列表 { 新员工{employeeid=1,lastname=“mike”,genderid=1}, 新员工{employeeid=2,lastname=“jeni”,genderid=2} }; 然后我有我的性别类列(id,标题) List genders=新列表 { 新的男性{id=1,title=“男性”}, 新的男性{id=2,title=“女性”} }; //然后

我已检索到一份员工名单。我的员工类列(employeeId、lastname、genderid)

List Items=新列表
{
新员工{employeeid=1,lastname=“mike”,genderid=1},
新员工{employeeid=2,lastname=“jeni”,genderid=2}
};
然后我有我的性别类列(id,标题)

List genders=新列表
{
新的男性{id=1,title=“男性”},
新的男性{id=2,title=“女性”}
};
//然后我试着把检索到的员工名单和性别联系起来
var x=来自项目中的emp
两性交融
关于emp.genderid等于sex.id
从a.DefaultIfEmpty(新的m_genders())中的b转换为a
选择新的
{
emp.lastname,
根德里德皇帝,
性别=b.头衔
};
红色的错误行显示在关键字join中,表示“join子句中的一个表达式的类型不正确…”


我如何才能正确地加入它们?

您的问题不清楚,代码可以正常工作:

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
                };
        }
    }
}
namespace WindowsFormsApp1
{
公共阶级男女平等
{
公共int id;
公共字符串标题;
}
公共级m_员工
{
public int employeeid{get;set;}
public int genderid{get;set;}
公共字符串lastname{get;set;}
}
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
列表性别=新列表
{
新的男性{id=1,title=“男性”},
新的男性{id=2,title=“女性”}
};
列表项=新列表
{
新员工{employeeid=1,lastname=“mike”,genderid=1},
新员工{employeeid=2,lastname=“jeni”,genderid=2}
};
var x=来自项目中的emp
两性交融
关于emp.genderid等于sex.id
变成
从a.DefaultIfEmpty(新m_genders())中的b开始
选择新的
{
emp.lastname,
根德里德皇帝,
性别=b.头衔
};
}
}
}

发生这种情况是因为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; }
}

完成。这只是一个employeespost m_employees和m_genders类的列表。你的代码运行良好!在这里查看:错误消息告诉您
m_genders.id
m_employees.genderid
是不兼容的类型。由于上述情况并非如此,我非常确定此示例代码与实际代码不同。可能您使用int表示一个,使用string表示另一个。然后你要么改变它,要么使用
int.Parse
int.ToString
使它们兼容(我创建了一个Employee类,而不是自动生成的m_employees和m_genders,它工作得很好。所以问题出在自动生成的类中哇!你明白了!你说得对!!m_genders.id默认为uint,因为它是主键,并且从genders表中自动递增。)
(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; }
}