Re: Concat, Distinct по строке
От: vmpire Россия  
Дата: 18.10.23 12:54
Оценка: 2 (1) +1
Здравствуйте, e.thrash, Вы писали:

ET>Не пойму почему в случае Concat, Distinct по одинаковыми строкам возвращает 2 вместо 1.


ET>
ET>internal class Program
ET>{
ET>    private static void Main(string[] args)
ET>    {
ET>        var dt1 = new dt()
ET>        {
ET>            id = 1,
ET>            ds = "20220101",
ET>            de = "20220202"
ET>        };


ET>        var dt2 = new dt()
ET>        {
ET>            id = 1,
ET>            ds = "20220101",
ET>            de = "20220202"
ET>        };

ET>        var l = new List<dt>();
ET>        l.Add(dt1);
ET>        l.Add(dt2);

ET>        //cnt = 2  ?
ET>        var s = l.GroupBy(dt => dt.id).Select(b => new { Key = b.Key, cnt = b.Select(d => d.ds.Concat(d.de)).Distinct().Count() });


ET>     //cnt = 1
ET>        var s2 = l.GroupBy(dt => dt.id).Select(b => new { Key = b.Key, cnt = b.Select(d => d.ds + d.de).Distinct().Count() }); 
ET>    }
ET>}

потому, что в первом случае Concat соединяет не строки, а энумераторы символов, получая новый энумератор. А два энумератора считаются различными объектами, даже если они на выходе дают одинаковый результат.

ET>тем более в мсдн написано такое

А это про другой Concat.

Слишком сложно пишете, от того и ошибки.

Попробуйте, например, изменить первый вариант на
var s = l.GroupBy(dt => dt.id).Select(b => new { Key = b.Key, cnt = b.Select(d => new string(d.ds.Concat(d.de).ToArray())).Distinct().Count()});
Отредактировано 18.10.2023 12:58 vmpire . Предыдущая версия . Еще …
Отредактировано 18.10.2023 12:57 vmpire . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.