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

时间:2013-12-27 07:53:22

标签: c# linq linq-to-sql

您好我有一个列表,它返回多个employee namenumber,其中Trip

  

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

     

我该如何处理不同的employee nameemployee number

List<MYLIST> assm = Utilities.LoadEntityInstances<VMYLIST>()
// some code to get all data of MYLIST

List<Employee> employees = new List<Employee>();
foreach (var item in assm)
{
    employees.Add(new Employee { Name = item.EmployeeName, EmployeeNumber = item.EmployeeNumber, LaborTypeName = item.LaborTypeName, SysId = item.Employee });
}

Nwow employees对象返回多条记录 我想在namenumber

之后只拍一个记录

2 个答案:

答案 0 :(得分:2)

试试这个:

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 distincts = employees.GroupBy(x => new { x.Name, x.EmployeeNumber } )
    .Select(x => new Employee  
    {
         Name = x.Key.Name,
         EmployeeNumber = x.Key.EmployeeNumber,
         LaborTypeName = x.First().LaborTypeName,
         SysId = x.First().SysId
    })
    .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 });
}

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

答案 1 :(得分:2)

var ls = employees.Select(x=>
    new {
        Name = x.EmployeeName
        ,Number = x.EmployeeNumber
    }
).Distinct().ToList();