使用 linq 查询连接两个列表 - C#
Join two lists using linq queries - C#
我有一个任务,我必须加入两个相同类型的列表(客户)。他们有相似的条目,我必须避免重复。
这是我的客户class:
class Customer
{
private String _fName, _lName;
private int _age, _cusIndex;
private float _expenses;
public Customer(String fName, String lName, int age, float expenses, int cusIndex)
{
this._fName = fName;
this._lName = lName;
this._age = age;
this._expenses = expenses;
this._cusIndex = cusIndex;
}
}
所以我有两个 List<Customer>
,分别命名为 customers1
和 customers2
。我需要在不使用 Collections 方法的情况下加入这两个(比如 customer1.Union(customer2).ToList();
但使用 Linq 查询。
这是我写的 Linq 查询:
var joined = (from c1 in customers1
join c2 in customers2
on c1.CusIndex equals c2.CusIndex
select new {c1, c2});
但这给了我同时出现在两个列表中的成员。但我需要所有,没有重复。有什么解决办法吗???
Union
方法似乎没有等效的查询。您需要在方法链调用或查询中使用此方法。
如果你查看MSDN documentation返回两个序列的集合并集,你会看到以下官方查询:
var infoQuery =
(from cust in db.Customers
select cust.Country)
.Union
(from emp in db.Employees
select emp.Country)
;
所以,你的情况只有两个选择:
方法链:
var joined = customers1.Union(customers2);
LINQ 查询
var joined = (from c1 in customers1
select c1)
.Union
(from c2 in customers2
select c2);
为什么不使用 Distinct 来过滤掉重复项?
var joined = (from c1 in customers1
join c2 in customers2
on c1.CusIndex equals c2.CusIndex
select new {c1, c2}).Distinct();
Microsoft.Ajax.Utilities
中有个不错的extension。它有一个名为 DistinctBy
的函数,这可能与您的情况更相关。
我有一个任务,我必须加入两个相同类型的列表(客户)。他们有相似的条目,我必须避免重复。
这是我的客户class:
class Customer
{
private String _fName, _lName;
private int _age, _cusIndex;
private float _expenses;
public Customer(String fName, String lName, int age, float expenses, int cusIndex)
{
this._fName = fName;
this._lName = lName;
this._age = age;
this._expenses = expenses;
this._cusIndex = cusIndex;
}
}
所以我有两个 List<Customer>
,分别命名为 customers1
和 customers2
。我需要在不使用 Collections 方法的情况下加入这两个(比如 customer1.Union(customer2).ToList();
但使用 Linq 查询。
这是我写的 Linq 查询:
var joined = (from c1 in customers1
join c2 in customers2
on c1.CusIndex equals c2.CusIndex
select new {c1, c2});
但这给了我同时出现在两个列表中的成员。但我需要所有,没有重复。有什么解决办法吗???
Union
方法似乎没有等效的查询。您需要在方法链调用或查询中使用此方法。
如果你查看MSDN documentation返回两个序列的集合并集,你会看到以下官方查询:
var infoQuery =
(from cust in db.Customers
select cust.Country)
.Union
(from emp in db.Employees
select emp.Country)
;
所以,你的情况只有两个选择:
方法链:
var joined = customers1.Union(customers2);
LINQ 查询
var joined = (from c1 in customers1 select c1) .Union (from c2 in customers2 select c2);
为什么不使用 Distinct 来过滤掉重复项?
var joined = (from c1 in customers1
join c2 in customers2
on c1.CusIndex equals c2.CusIndex
select new {c1, c2}).Distinct();
Microsoft.Ajax.Utilities
中有个不错的extension。它有一个名为 DistinctBy
的函数,这可能与您的情况更相关。