0

これに似たDBテーブルがあります。

ID | ステータス| タイプ

など...など

私はlinqを使用して、このコレクションから個別のステータスを識別しようとしています

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

しかし、これはすべてのステータスを返します。次のリンクを使用して以下の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;
    }
}
}

私の問題は次のとおりです。初期には正常に機能するシステムがありました。実際、同じデータベースを使用する別のシステムが必要だったので、それを組み込みました。検索には、いくつかのフィルターを含む高度なオプションがあり、そのうちの1つはステータスですが、上記の(緩い)DB構造ステータスから、タイプは異なりますがテキストは似ていることがわかります。Linq を介して、個別のテキストでステータス全体を選択できるようにする必要があります。すべての助けをいただければ幸いです。

も試しました

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

これも System.NotSupportedException で失敗しました

4

1 に答える 1

2

すべての異なるステータスを選択するには:

ctx.Status.Select(s => new { s.StatusDescription, s.Type }).Distinct();
于 2012-09-25T13:59:29.963 に答える