Как заставить группу linq работать, используя класс - PullRequest
0 голосов
/ 22 октября 2018

У меня есть список этого класса

public class TB_EDS_LOG
{
    public string CLASS_NAME { get; set; }
    public string FIELD { get; set; }
    public Nullable<decimal> OID { get; set; }
    public string CODE_OF { get; set; }
    public string OLD_VALUE { get; set; }
    public string NEW_VALUE { get; set; }
    public string ACTION { get; set; }
    public Nullable<short> ISPASS { get; set; }
    public string RESAULT { get; set; }
    public string USER_ID { get; set; }
    public Nullable<System.DateTime> DATEOF { get; set; }
    public string EDS_ID { get; set; }
    public decimal ID { get; set; }
    public Nullable<decimal> F1 { get; set; }
    public string FK_GISTABLECODE { get; set; }
    public string FK_GISCODE { get; set; }
    public Nullable<decimal> ZID { get; set; }
}

Я хочу использовать linq для группировки этих списков по двум столбцам.поэтому я использую этот класс:

private class ClassOid
{
    public string CLASS_NAME { get; set; }
    public decimal? OID { get; set; }
}

и синтаксис запроса:

from dataGiven in data
                    group dataGiven by new ClassOid
                    {
                        CLASS_NAME = dataGiven.CLASS_NAME,
                        OID = dataGiven.OID
                    };

, но это не работает должным образом и возвращает все строки.когда я использую анонимный тип, он работает нормально.

from dataGiven in data
                    group dataGiven by new
                    {
                        CLASS_NAME = dataGiven.CLASS_NAME,
                        OID = dataGiven.OID
                    };

мне нужно использовать только анонимный тип, а не тип класса?

РЕДАКТИРОВАТЬ:

Я переопределил Equalsи GetHashCode, как показано ниже.но все равно не повезло.

    public override bool Equals(object other)
    {
        var classOid = other as ClassOid;
        return classOid != null && (string.Equals(CLASS_NAME, classOid.CLASS_NAME) && OID == classOid.OID);
    }

    public override int GetHashCode()
    {
        return CLASS_NAME.GetHashCode()
               ^ OID.GetHashCode();
    }
...