我有一个类似于此的数据库表。
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
而失败答案 0 :(得分:2)
选择所有不同的状态:
ctx.Status.Select(s => new { s.StatusDescription, s.Type }).Distinct();