C#忽略数据表中的“重复”

时间:2012-09-01 17:14:49

标签: c# sql linq

我有来自某个源的数据表结构

bookid title author

如果该书有多位作者,该表可以包含相同的书(重复)。像

Book id    title    author    
32         Book1    P. Samsom
45         Book34   R. Englund
45         Book34   H. Granger
56         Book45   F. Lister

现在第二本和第三本书是相同的(它有2位作者)。当显示表格(可能包含数千个项目)时,我不想两次或更多次显示同一本书。显示其中一个就足够了(我不在乎)。

在桌面上做一个选择distinct将无济于事。做一个选择明显忽略作者的作品,但我需要至少一个作者。所以我想要做的是找到一种最有效的方法来创建一个新的表或视图,忽略任何“重复”的项目至少保留一个作者。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

var books = Books.GroupBy(x=>x.Title).Select(x=>x.First()).ToList();

答案 1 :(得分:0)

var result =  books.GroupBy(b => b.bookid)
                   .Select(g => 
                        new { 
                            id = g.Key, 
                            title = g.First().title, 
                            authors = g.Select(a=>a.author).ToList() 
                        })
                   .ToList();

答案 2 :(得分:0)

来自MoreLINQ

DistinctBy

var results = books.DistinctBy(x => x.title).ToList();