我正在使用MVC3和Entity框架。这次我想在列表中制作独特的项目。这是我的项目清单。
列表
1.Overdue-1
2.Overdue-M
3.ItemsDue-1
4.ItemsDue-5
在上面的列表中,我只想过滤以仅获取此列表,
1.Overdue
2.Itemsdue
另外,我需要将这个作为DropdownList,其中Overdue或Itemsdue作为Dropdown Text字段& 1到n作为值字段。我试过这个。但我可以为Dropdown和Unique列表做逻辑。
代码
var select = (from asd in db.Sys
select new EmailTemp
{
SysCode = asd.Code,
SysmailId = asd.Id
}).Distinct().ToList();
List<EmailTemp> filterlist = new List<EmailTemp>();
foreach (var a in select)
{
string lates = a.SysCode;
var ind = lates.IndexOf("-");
if (ind > 0)
{
a.SysCode = lates.Substring(0, ind);
a.SysmailId = a.SysmailId;
filterlist.Add(a);
}
else
{
a.SysCode = lates;
a.SysmailId = a.SysmailId;
filterlist.Add(a);
}
}
//var idlist = filterlist.Distinct().ToList();
ViewBag.SysMailType = new SelectList(filterlist.Distinct().ToList(), "SysmailId", "SysCode");
请有人告诉我,我可以写下代码来实现我的逻辑。
由于
答案 0 :(得分:0)
您可以创建自定义equality comparer并使用它来使用Distinct
比较项目。
class MyEqualityComparer: EqualityComparer<EmailTemp>
{
private string GetPrefix(string s)
{
var pos = sIndexOf("-");
var rslt = (pos > 0) ? s.SubString(0, pos) : s;
return rslt;
}
public override bool Equals(EmailTemp t1, EmailTemp t2)
{
var s1 = GetPrefix(t1.SysCode);
var s2 = GetPrefix(t2.SysCode);
return s1.Equals(s2);
}
public override int GetHashCode(EmailTemp t1)
{
return GetPrefix(t1.SysCode).GetHashCode();
}
}
并且,要生成唯一项目列表:
List<EmailTemp> filterList = select.Distinct(new MyEqualityComparer()).ToList();
可能有一种方法可以将它与您的第一个LINQ表达式结合起来。也许其他人会参与进来。