linq状态必须返回不同

时间:2012-09-25 13:55:27

标签: c# .net linq

我有一个类似于此的数据库表。

ID | 状态 |的类型

等等...等

我正在使用linq尝试从这个集合中识别不同的状态,如此

results = ctx.Status.Distinct(new StatusComparer()).ToList();

但是这会返回所有状态,我使用下面的Link构建下面的Comparer,我在另一个StackOverflow中发现了这个建议Post

    public class StatusComparer : IEqualityComparer<Status>
{
    public bool Equals(Status x, Status y)
    {
        // Check whether the compared objects reference the same data. 
        if (ReferenceEquals(x, y))
        {
            return true;
        }

        // Check whether any of the compared objects is null. 
        if (ReferenceEquals(x, null) || ReferenceEquals(y, null))
        {
            return false;
        }

        // Check whether the status' properties are equal. 
        return x.StatusDescription == y.StatusDescription && x.Type == y.Type && x.StatusID == y.StatusID;
    }

    public int GetHashCode(Status status)
    {
        // Get hash code for the Name field if it is not null. 
        var hashStatusId = status.StatusID.GetHashCode();

        // Get hash code for the Code field. 
        var hashStatusDescription = status.StatusDescription.GetHashCode();

        var hashStatusType = status.Type.GetHashCode();

        // Calculate the hash code for the product. 
        return hashStatusId ^ hashStatusDescription ^ hashStatusType;
    }
}
}

我的问题如下,我们有一个工作正常的系统,所以他们实际上他们想要另一个使用相同数据库的系统,所以我们检查它。搜索有一个高级选项,有几个过滤器,其中一个是状态但正如您从上面所看到的(松散)DB结构状态具有不同类型但类似的文本。我需要能够通过不同的文本通过Linq选择整个状态。所有的帮助将不胜感激。

也尝试了

results = (from s in context.Status group s by s.StatusDescription into g select        g.First()).ToList();

这也因System.NotSupportedException

而失败

1 个答案:

答案 0 :(得分:2)

选择所有不同的状态:

ctx.Status.Select(s => new { s.StatusDescription, s.Type }).Distinct();