См. Следующий пример кода, вы можете использовать предложение GroupBy для удаления повторяющихся записей (на основе свойства text и value), а затем проверьте, содержат ли элементы группы выбранное значение (True: IsDefault равно 1; False : IsDefault равно 0):
var user = "User 2";
var result = (from udd in usddlist
join u in userlist on udd.UserId equals u.Id
join d in departmentlist on udd.DepartmentId equals d.Id
where u.UserName == user
select new
{
Value = d.Id.ToString(),
Text = d.DepartmentName,
IsSelected = udd.IsDefault == 1 ? true : false
}).GroupBy(c => new { c.Text, c.Value })
.Select(c =>
new SelectListItem
{
Value = c.Key.Value,
Text = c.Key.Text,
Selected = c.Where(d => d.IsSelected == true).ToList().Count == 0 ?false : true
})
.Distinct().ToList();
Начальные данные:
List<Depot> depotlist = new List<Depot>()
{
new Depot(){ Id=1, DepotName="Depot 1"},
new Depot(){ Id=2, DepotName="Depot 2"}
};
List<Department> departmentlist = new List<Department>()
{
new Department(){ Id=1, DepartmentName="Sales"},
new Department(){ Id=2, DepartmentName="Account"},
new Department(){ Id=3, DepartmentName="Marketing"},
};
List<User> userlist = new List<User>()
{
new User(){ Id=1, UserName="User 1"},
new User(){ Id=2, UserName="User 2"}
};
List<USerDepotDepartmentLink> usddlist = new List<USerDepotDepartmentLink>()
{
new USerDepotDepartmentLink(){ UserId = 1, DepotId = 1, DepartmentId = 1,IsDefault=1},
new USerDepotDepartmentLink(){ UserId = 1, DepotId = 1, DepartmentId = 2,IsDefault=0},
new USerDepotDepartmentLink(){ UserId = 2, DepotId = 1, DepartmentId = 2,IsDefault=0},
new USerDepotDepartmentLink(){ UserId = 2, DepotId = 1, DepartmentId = 3,IsDefault=0},
new USerDepotDepartmentLink(){ UserId = 2, DepotId = 2, DepartmentId = 1,IsDefault=0},
new USerDepotDepartmentLink(){ UserId = 2, DepotId = 2, DepartmentId = 2,IsDefault=1},
new USerDepotDepartmentLink(){ UserId = 2, DepotId = 2, DepartmentId = 3,IsDefault=0},
};
После выполнения приведенного выше кода результат, как показано ниже (выбранный отдел - это свойство Select Account, Sales and Marketing is "false"):
If you want to sort the DropDownlist items, after filter data, you could use Метод OrderBy () для сортировки элементов SelectList.