我有一个数据表,需要在其中将每一行转换为IList
public IList<SelectListItem> _area = new List<SelectListItem>();
public IList<SelectListItem> _team = new List<SelectListItem>();
foreach (DataRow row in dt.Rows)
{
_area.Add(new SelectListItem() { Text = row[1].ToString(), Value = row[1].ToString() });
_team.Add(new SelectListItem() { Text = row[0].ToString(), Value = row[0].ToString() });
}然后在_area中获得的数据如下所示:
Text Value
OMC OMC
OMC OMC
OMC OMC
SIAM SIAM
SIAM SIAM
SIAM SIAM
SIAM SIAM
SIAM SIAM我需要使用LINQ来获取不同的值。
我已经尝试过简单地使用:
_area.Distinct();但我只剩下32个条目,我一开始就是?
发布于 2012-07-04 19:26:16
_area.GroupBy(x => x.Value).Select(x => x.Key);这将为您提供这些区域的不同值。
这样怎么样?
_area.GroupBy(x => x.Value).Select(x => x.First());你能更好地解释什么是不同的吗?也许你应该覆盖Equals和GetHashCode,这样它就会工作在不同的地方,就像这样
class Foo
{
public string Text { get; set; }
public string Value { get; set; }
public override bool Equals(object obj)
{
var foo = obj as Foo;
if(foo == null) return false;
return foo.Text == Text && foo.Value == Value;
}
public override int GetHashCode()
{
return Text.GetHashCode() * Value.GetHashCode() ^ 7;
}
}然后这将会像你期望的那样工作(希望如此)
_area.Distinct();发布于 2012-07-04 19:21:01
你试过这个_area = _area.Distinct();吗?
发布于 2012-07-04 19:42:42
Distinct()方法接受IEqualityComparer<T>类型的参数,因此在本例中,您可以创建一个相等比较器来比较两个SelectListItems的两个值,如下所示:
public class SelectListItemComparer : IEqualityComparer<SelectListItem>
{
public static SelectListItemComparer Instance = new SelectListItemComparer();
private SelectListItemComparer() {}
public bool Equals(SelectListItem x, SelectListItem y)
{
return x.Value.Equals(y.Value);
}
public int GetHashCode(SelectListItem obj)
{
return obj.Value.GetHashCode();
}
}然后你可以像这样使用它:
var items = new[]
{
new SelectListItem {Text = "OMC", Value = "OMC"},
new SelectListItem {Text = "OMC", Value = "OMC"},
new SelectListItem {Text = "OMC", Value = "OMC"},
new SelectListItem {Text = "SIAM", Value = "SIAM"},
new SelectListItem {Text = "SIAM", Value = "SIAM"},
new SelectListItem {Text = "SIAM", Value = "SIAM"},
new SelectListItem {Text = "SIAM", Value = "SIAM"},
new SelectListItem {Text = "SIAM", Value = "SIAM"}
};
var comparer = new SelectListItemComparer();
var t1 = items.Distinct(SelectListItemComparer.Instance).ToList();t1现在将只包含两个元素。
https://stackoverflow.com/questions/11328032
复制相似问题