これに似た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 で失敗しました