我有一个ASP.NET网络表单,其中包含一个启用了多选选项的列表框(lbxRegions
)。在我的数据库中,我有一个带有xml字段的表,其中包含一个区域列表。我需要使用所有可用区域填充列表框,然后“检查”与db表中的区域匹配的列表项。列表选项也需要按地区名称排序。所以,我写了下面的代码,工作正常 - 没有问题。但我想知道是否有人能想到更好(更简洁,更有效)的方式来做同样的事情。提前谢谢。
Dim allRegions = XElement.Load(Server.MapPath(Request.ApplicationPath) & "\Regions.xml").<country>.<regions>.<region>
Dim selectedRegions = (From ev In dc.Events Where ev.EventId = 2951).Single.CEURegions.<country>.<regions>.<region>
Dim unselectedRegions = allRegions.Except(selectedRegions)
Dim selectedItems = From x In selectedRegions Select New ListItem() _
With {.Value = x.@code, .Text = x.Value, .Selected = True}
Dim unselectedItems = From x In unselectedRegions Select New ListItem() _
With {.Value = x.@code, .Text = x.Value}
Dim allItems = selectedItems.Union(unselectedItems).OrderBy(Function(x) x.Text)
lbxRegions.Items.AddRange(allItems.ToArray())
P.S。如果您愿意,可以在C#中发布代码。
答案 0 :(得分:1)
allRegions = GetAllRegions();
selectedRegions = GetSelectedRegions();
allItems = from r in allRegions
select new ListItem()
{
Value = ...
Text = ...
Selected = selectedRegions.Contains(r);
} into item
order by item.Text
select item;
lbxRegions.Items.AddRange(allItems.ToArray())
AddRange
需要IEnumerable<T>
,因此不需要调用ToArray
。