Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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# 如何从列表中只获取一条记录一次?_C#_Linq_Linq To Sql - Fatal编程技术网

C# 如何从列表中只获取一条记录一次?

C# 如何从列表中只获取一条记录一次?,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,您好,我有一个列表,它返回我多个不同的行程的员工姓名,编号 我只想显示一个员工姓名和员工编号一次 我如何获取不同的员工姓名和员工编号 List assm=Utilities.LoadEntityInstances() //获取MYLIST所有数据的一些代码 列出员工=新列表(); foreach(assm中的var项目) { 添加(新员工{Name=item.EmployeeName,EmployeeNumber=item.EmployeeNumber,LaborTypeName=item.La

您好,我有一个列表,它返回我多个不同的
行程的
员工姓名
编号

我只想显示一个员工姓名和员工编号一次

我如何获取不同的
员工姓名
员工编号

List assm=Utilities.LoadEntityInstances()
//获取MYLIST所有数据的一些代码
列出员工=新列表();
foreach(assm中的var项目)
{
添加(新员工{Name=item.EmployeeName,EmployeeNumber=item.EmployeeNumber,LaborTypeName=item.LaborTypeName,SysId=item.Employee});
}
nOW
employees
对象返回多条记录 我只想记录一次
name
number

试试这个:

employees.GroupBy(x => new { x.Name, x.EmployeeNumber } )
    .ToList()
    .ForEach(x => 
    {
        var row = x.First();

        Console.WriteLine("Name: {0}\nNumber: {1}\nLabor: {2}\nSysId: {3}", x.Key.Name, x.Key.EmployeeNumber, row.LaborTypeName, row.SysId);  
    });

但请注意,这是一种事后行为。如果您需要即时执行,请尝试以下操作:

List<MYLIST> assm = Utilities.LoadEntityInstances<VMYLIST>()

List<Employee> employees = new List<Employee>();
foreach (var item in assm)
{
    // if this element was not added before
    if (employees.All(x => x.Name != item.EmployeeName && x.EmployeeNumber != item.EmployeeNumber))
        employees.Add(new Employee { Name = item.EmployeeName, EmployeeNumber = item.EmployeeNumber, LaborTypeName = item.LaborTypeName, SysId = item.Employee });
}
List assm=Utilities.LoadEntityInstances()
列出员工=新列表();
foreach(assm中的var项目)
{
//如果之前未添加此元素
if(employees.All(x=>x.Name!=item.EmployeeName&&x.EmployeeNumber!=item.EmployeeNumber))
添加(新员工{Name=item.EmployeeName,EmployeeNumber=item.EmployeeNumber,LaborTypeName=item.LaborTypeName,SysId=item.Employee});
}
这是一个非常简单的解决方案,实际上并不是最有效的。为了提高速度,您可以使用
字典

尝试以下方法:

employees.GroupBy(x => new { x.Name, x.EmployeeNumber } )
    .ToList()
    .ForEach(x => 
    {
        var row = x.First();

        Console.WriteLine("Name: {0}\nNumber: {1}\nLabor: {2}\nSysId: {3}", x.Key.Name, x.Key.EmployeeNumber, row.LaborTypeName, row.SysId);  
    });
var ls = employees.Select(x=>
    new {
        Name = x.EmployeeName
        ,Number = x.EmployeeNumber
    }
).Distinct().ToList();

但请注意,这是一种事后行为。如果您需要即时执行,请尝试以下操作:

List<MYLIST> assm = Utilities.LoadEntityInstances<VMYLIST>()

List<Employee> employees = new List<Employee>();
foreach (var item in assm)
{
    // if this element was not added before
    if (employees.All(x => x.Name != item.EmployeeName && x.EmployeeNumber != item.EmployeeNumber))
        employees.Add(new Employee { Name = item.EmployeeName, EmployeeNumber = item.EmployeeNumber, LaborTypeName = item.LaborTypeName, SysId = item.Employee });
}
List assm=Utilities.LoadEntityInstances()
列出员工=新列表();
foreach(assm中的var项目)
{
//如果之前未添加此元素
if(employees.All(x=>x.Name!=item.EmployeeName&&x.EmployeeNumber!=item.EmployeeNumber))
添加(新员工{Name=item.EmployeeName,EmployeeNumber=item.EmployeeNumber,LaborTypeName=item.LaborTypeName,SysId=item.Employee});
}

这是一个非常简单的解决方案,实际上并不是最有效的。为了提高速度,您可以使用
字典

EmployeeName
EmployeeNumber
区分,但您还需要填写
laborarypename
SysID
属性。这些是什么?区别在于
EmployeeName
EmployeeNumber
,但您也在填写
laborartypename
SysID
属性。这些是什么?这是在foreach里面吗?谢谢应该在foreach里面?语法?foreach(赋值中的变量项){var distincts=employeens.GroupBy(x=>new{x.Name,x.EmployeeNumber})。选择(x=>new employeen{Name=x.Key.Name,EmployeeNumber=x.Key.EmployeeNumber,LaborTypeName=x.First().LaborTypeName,SysId=x.First().SysId})。ToList();}是吗?我看你需要即时解决方案?再次查看我更新的答案:)这是在foreach中吗?谢谢应该在foreach中吗?语法?foreach(赋值中的变量项){var distincts=employeens.GroupBy(x=>new{x.Name,x.EmployeeNumber})。选择(x=>new employeen{Name=x.Key.Name,EmployeeNumber=x.Key.EmployeeNumber,LaborTypeName=x.First().LaborTypeName,SysId=x.First().SysId})。ToList();}是吗?我看你需要即时解决方案?再次查看我更新的答案:)这是否在foreach内部?否。您将收到新列表。这是否在foreach内部?否。您将收到新列表。
var ls = employees.Select(x=>
    new {
        Name = x.EmployeeName
        ,Number = x.EmployeeNumber
    }
).Distinct().ToList();