linq 获取List中的非重复值列表

bn31dyow  于 2022-12-06  发布在  其他
关注(0)|答案(6)|浏览(249)

在C#中,假设我有一个名为Note的类,它有三个字符串成员变量。

public class Note
{
    public string Title;
    public string Author;
    public string Text;
}

我有一个Note类型的列表:

List<Note> Notes = new List<Note>();

要获取Author列中所有非重复值的列表,最简洁的方法是什么?
我可以遍历列表,并将所有不重复的值添加到另一个字符串列表中,但这似乎很脏,效率也很低。我有一种感觉,有一些神奇的Linq构造可以在一行中完成这项工作,但我还没有找到任何东西。

lvjbypge

lvjbypge1#

Notes.Select(x => x.Author).Distinct();

这将返回Author值的序列(IEnumerable<string>)--每个唯一值一个。

h9a6wy2h

h9a6wy2h2#

按作者区分便笺类

var DistinctItems = Notes.GroupBy(x => x.Author).Select(y => y.First());

foreach(var item in DistinctItems)
{
    //Add to other List
}
6jygbczu

6jygbczu3#

Jon Skeet编写了一个名为morelinq的库,其中包含一个DistinctBy()运算符。

IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);

**更新:**如果您只是在寻找一组不同的作者,重新阅读您的问题后,Kirk会给出正确答案。

添加了示例,DistinctBy中的几个字段:

res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
5cnsuln7

5cnsuln74#

public class KeyNote
{
    public long KeyNoteId { get; set; }
    public long CourseId { get; set; }
    public string CourseName { get; set; }
    public string Note { get; set; }
    public DateTime CreatedDate { get; set; }
}

public List<KeyNote> KeyNotes { get; set; }
public List<RefCourse> GetCourses { get; set; }    

List<RefCourse> courses = KeyNotes.Select(x => new RefCourse { CourseId = x.CourseId, Name = x.CourseName }).Distinct().ToList();

通过使用上面的逻辑,我们可以得到唯一的Course s。

xzlaal3s

xzlaal3s5#

@if (dataModal.Count > 0)
{
    var DistinctItems = dataModal.GroupBy(x => x.Year).Select(y => y.First());

    <div class="col-md-3">
        <label class="fs-7 form-label text-muted">@Localizer["Year"]</label>
            <InputSelect id="ddlYears" class="form-select" @bind-Value="filter.Year">                            
                <option value="">@Localizer["Select"]</option>
                @foreach (var year in DistinctItems)
                {
                   <option value="@year.Year">
                       @year.Year
                   </option>
                }
            </InputSelect>
    </div>
}
piok6c0g

piok6c0g6#

mcilist = (from mci in mcilist select mci).Distinct().ToList();

相关问题