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});
}
nOWemployees
对象返回多条记录
我只想记录一次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();