abdul subhan mohammed Ответов: 2

По крайней мере один объект должен реализовывать icomparable. LINQ C#


Дорогие Все,

У меня есть список и я применение метода groupBy, orderby используется &амп; методы thenby помощью LINQ-язык C#.

Когда я изменяю requestDate и замечания, я получаю следующую ошибку.

At least one object must implement IComparable.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentException: At least one object must implement IComparable.


Что я уже пробовал:

IEnumerable<CandidateRefundVoucherInfo> requestVouchers = CandidateRefundVoucherController.Instance.GetByCenterID(16);

            if (requestVouchers.Count() > 0)
            {
                var CandidateRefundVouchers = requestVouchers.
                    Select(items => new
                    {
                        CertificateID = items.Certificate.ID,
                        items.Certificate.Code,
                        items.Certificate.NameEN,
                        items.Certificate.NameAR,
                        items.Remarks,
                        items.RequestDate,
                        items.NumberOfRefundVoucherRequest,
                        items.StatusType,
                        UpdatedByUser = items.UpdatedByUser.NameEN
                    }).
                    GroupBy(i => new
                    {
                        i.CertificateID,
                        i.Code,
                        i.NameEN,
                        i.NameAR,
                        i.Remarks,
                        i.RequestDate,
                        i.NumberOfRefundVoucherRequest,
                        i.StatusType,
                        i.UpdatedByUser
                    })
                        .OrderByDescending(d => new { d.Key.RequestDate })
                        .ThenBy(l => new { l.Key.Remarks })
                        .Select(item => new
                        {
                            ID = item.Key.CertificateID,
                            Code = item.Key.Code,
                            NameEN = item.Key.NameEN,
                            NameAR = item.Key.NameAR,
                            RequestedVouchers = item.Sum(items => items.NumberOfRefundVoucherRequest),
                            Status = item.Key.StatusType,
                            RequestedDate = item.Key.RequestDate.ToString("dddd, dd MMMM yyyy"),
                            Remarks = item.Key.Remarks,
                            UpdatedBy = item.Key.UpdatedByUser,
                            BindLink = BindCode(item.Key.CertificateID, item.Key.Code)
                        });

                rptCandidateRefundVouchers.DataSource = CandidateRefundVouchers;
                rptCandidateRefundVouchers.DataBind();



Кто-нибудь может пожалуйста помочь мне.


Спасибо

2 Ответов

Рейтинг:
2

abdul subhan mohammed

Я все понял!

IEnumerable<CandidateRefundVoucherInfo> candidateRefundVoucherList = requestVouchers;
                var refundVouchers = candidateRefundVoucherList.OrderByDescending(d => d.RequestDate).
                    GroupBy(r => r.RequestDate).Select(item => new {
                    ID = item.First().Certificate.ID,
                    Code = item.First().Certificate.Code,
                    NameEN = item.First().Certificate.NameEN,
                    NameAR = item.First().Certificate.NameAR,
                    RequestedVouchers = item.Sum(items => items.NumberOfRefundVoucherRequest),
                    Status = item.First().StatusType,
                    RequestedDate = item.First().RequestDate.ToString("dddd, dd MMMM yyyy"),
                    Remarks = item.First().Remarks,
                    UpdatedBy = item.First().UpdatedByUser.NameEN,
                    BindLink = BindCode(item.First().Certificate.ID, item.First().Certificate.Code, item.First().RequestDate.ToShortDateString())
                });

                rptCandidateRefundVouchers.DataSource = refundVouchers;
                rptCandidateRefundVouchers.DataBind();


Рейтинг:
0

Aydin Homay

Сообщение об ошибке очень ясно, чтобы упорядочить набор вещей, должен быть способ сравнить две вещи. Вам нужно реализовать интерфейс IComparable, чтобы обеспечить сравнение с другим экземпляром. В случае проблем код, будет возникает в OrderByDescending способ.

Смотрите также ссылку ниже:
c# - по крайней мере один объект должен реализовывать IComparable вызов OrderBy() - переполнение стека[^]