簡體   English   中英

如何獲得大寫和小寫的獨特價值?

[英]How to get distinct value of Upper and lower case?

我有這個功能,我想在#數據#中獲得獨特的價值。 但是我的問題是,如果有兩個具有相同字符的值,但一個是上位而一個是下位(即喜劇和喜劇),則我的數據中仍然同時具有喜劇和喜劇的值。 因此,當我綁定到數據時...會同時顯示兩者。

我的職能是:

public void LoadBookGenre(Book abc)
{
    var loadbook = from Book s in BookDB.Books where s.Genre == abc.Genre select s;
    BookAttribute.Clear();
    foreach (Book m in loadbook) BookAttribute.Add(m);
    List<Book> distinct = BookAttribute.GroupBy(a => a.Genre).Select(g => g.First()).ToList(); 
    Data.Clear(); 
    foreach (Book s in distinct) Data.Add(s);
}

您可以使用GroupBy重載,該重載允許您指定不區分大小寫的比較器:

List<Book> distinct = 
    BookAttribute.GroupBy(a => a.Genre, StringComparer.OrdinalIgnoreCase)
                 .Select(g => g.First())
                 .ToList();

根據您的方案,您也許還可以使用Distinct

List<string> distinctGenres = 
    BookAttribute.Select(a => a.Genre)
                 .Distinct(StringComparer.OrdinalIgnoreCase)
                 .ToList();

編輯 :您還需要在初始查詢中更改相等性檢查:

var loadbook = from Book s in BookDB.Books 
               where s.Genre.Equals(abc.Genre, StringComparison.OrdinalIgnoreCase)
               select s;

常見的解決方案是維護使用upper()或lower()強制使用大寫或小寫字母的字符串的版本,並將該內部字符串用於比較,並將原始字符串用作“顯示”版本。

更換

Data.Add(s);

通過

var found = Data.SingleOrDefault(x => x.Genre.ToUpperInvariant() == s.Genre.ToUpperInvariant());
if (found == null)
{
    Data.Add(s);
}

這樣,您可以避免兩次添加相同的名稱,同時保留找到的第一個名稱的大小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM