Ответ 1
Я думаю, что эта строка может заменить ваш второй блок кода:
CountryOptionsRepeater.DataSource =
countriesList
.Distinct()
.OrderBy(c => c)
.Select(c => new { CountryName = c })
.ToList();
Я пытаюсь оптимизировать код для веб-сайта SharePoint. У меня есть контроль ретранслятора:
<asp:Repeater ID="CountryOptionsRepeater" runat="server">
<ItemTemplate>
<option value='<%#Eval("CountryName") %>'><%#Eval("CountryName") %></option>
</ItemTemplate>
</asp:Repeater>
Я заполняю его таблицей данных
countriesList = countriesList.Distinct<String>().ToList<String>();
countriesList.Sort();
//var noDupsCountriesList = new HashSet<String>(countriesList);
DataTable dt = new DataTable();
dt.Columns.Add("CountryName");
foreach (String countryName in countriesList)
{
DataRow dr = dt.NewRow();
dr["CountryName"] = countryName;
dt.Rows.Add(dr);
}
CountryOptionsRepeater.DataSource = dt;
CountryOptionsRepeater.DataBind();
this.DataBind();
Есть ли способ напрямую связать объект HashSet (noDupsCountriesList) с DataSource с той же конфигурацией ретранслятора, чтобы обеспечить оптимизацию?
Что-то вроде:
//countriesList = countriesList.Distinct<String>().ToList<String>();
//countriesList.Sort();
var noDupsCountriesList = new HashSet<String>(countriesList);
CountryOptionsRepeater.DataMember = "CountryName"; // ??
CountryOptionsRepeater.DataSource = noDupsCountriesList;
CountryOptionsRepeater.DataBind();
this.DataBind();
Я думаю, что эта строка может заменить ваш второй блок кода:
CountryOptionsRepeater.DataSource =
countriesList
.Distinct()
.OrderBy(c => c)
.Select(c => new { CountryName = c })
.ToList();