我正在使用以下Linq來確定在我的列表中是否有任何無效條目在一些自定義驗證過程中 - 我想知道是否有人被分配了根據他們的工作,其中本公司相同數量的正常工作:使用Linq獲取列表中基於2個字段的重複條目列表
var duplicates = Persons.GroupBy(x =>
new { x.Number, x.CompanyId}, (key) => new { key.Number, key.CompanyId })
.Where(y => y.Count() > 1);
對於一個簡單的類人:
class Person
{
public string Name { get; set; }
public int Number { get; set; }
public int CompanyId { get; set; }
}
因此,建立一些測試數據:
List<Person> Persons = new List<Person>();
// add people (users would do this!)
Persons.Add(new Person() { Name = "Person 1", Number = 1, CompanyId = 1 }); // invalid
Persons.Add(new Person() { Name = "Person 2", Number = 2, CompanyId = 1 });
Persons.Add(new Person() { Name = "Person 3", Number = 3, CompanyId = 1 });
Persons.Add(new Person() { Name = "Person 4", Number = 1, CompanyId = 1 }); // invalid
Persons.Add(new Person() { Name = "Person 5", Number = 2, CompanyId = 2 }); // invalid
Persons.Add(new Person() { Name = "Person 6", Number = 2, CompanyId = 2 }); // invalid
檢查是否有重複和手柄:
var duplicates = Persons.GroupBy(x =>
new { x.Number, x.CompanyId}, (key) => new { key.Number, key.CompanyId })
.Where(y => y.Count() > 1);
if (duplicates.Any())
{
// build a string
}
我想要做的是讓無效的條目列表,並通知用戶。因此,在上述情況下,我想要輸出以下文本:
- 人1和人4已被分配到公司#1的相同編號#1。
- 第5號公司和第6號公司已爲第2號公司分配了相同的號碼#2。
你有沒有像... Persons.Where(p =>(p.Number == p.CompanyId))這樣的東西,然後將結果分組 – Lloyd 2014-09-02 19:30:18
Number == Company?這不會起作用,因爲Number與公司沒有任何關係。每家公司都有自己的編號系統。號碼和公司必須爲GroupBy中的鑰匙。 – Andez 2014-09-02 19:33:16
您應該澄清爲什麼人員號碼或公司ID無效,是因爲重複的號碼還是什麼! – Lloyd 2014-09-02 19:50:10