super_user Ответов: 3

Различные значения в linq


Я пытаюсь запроса LINQ

&ЛТ;как ASP:dropdownlist с ИД="regiondrop" атрибут runat="сервер" autopostback элемента управления="истинный"
onselectedindexchanged= "regiondrop_SelectedIndexChanged" >


Я пытаюсь показать различные значения в раскрывающемся списке при загрузке страницы. Я пытаюсь этот запрос получить

Что я уже пробовал:

ценности

Чай Т1 = Т1 новые();
ВАР список1 = чай.Т1.Список();
var list = (из ta в list1
заказатьпо та.Области
выберите новый { та.Области,та.Либо }).Отчетливый().Список();
но это показывает все те же значения, где, как я хочу, различные значения


в моем сценарии данные таковы

Регион Рид
1 Париж
2 Канада
3 УК
4 Париж
5 Канада
6 Лондон
так что в этой Канаде и Париже 2 раза, так что я хочу это 1 раз в выпадающем списке

какое-нибудь решение?

Karthik_Mahalingam

Он уже различен только [Id и комбинация регионов]
который из них вы проигнорируете. [ 1 Париж, 2 Канада ] или [4 Париж, 5 Канада ]
distinct () не будет работать таким образом.

3 Ответов

Рейтинг:
4

Maciej Los

Лямбда-решение:

T1 tea = new T1();
var list = tea.t1.GroupBy(x=>x.Region)
                 .Select(grp=>new
                   {
                     RegionId = grp.First(),
                     Region = grp.Key
                   })
                 .ToList();
//further
regiondrop.DataSource = list;


Рейтинг:
21

OriginalGriff

Попробуйте сгруппировать их:

List<T1> list1 = new List<T1>();
list1.Add(new T1 { RegionID = 1, Region = "Paris" });
list1.Add(new T1 { RegionID = 2, Region = "Canada" });
list1.Add(new T1 { RegionID = 3, Region = "UK" });
list1.Add(new T1 { RegionID = 4, Region = "Paris" });
list1.Add(new T1 { RegionID = 5, Region = "Canada" });
list1.Add(new T1 { RegionID = 6, Region = "London" });
var list = from ta in list1
            group ta by ta.Region into newgroup
            orderby newgroup.Key
            select newgroup;
foreach (var t in list)
    {
    T1 t1 = t.First();
    Console.WriteLine("{0}:{1}", t1.RegionID, t1.Region);
    }


super_user

когда я попробую это .
protected void Page_Load(отправитель объекта, EventArgs e)
{

Чай Т1 = Т1 новые();
ВАР список1 = чай.таблица1.Список();
var list = from ta in list1
группа ta по Ta. Region в новую группу
newgroup заказатьпо.Ключ
выберите newgroup;

это показывает тот же вывод, что и повторяющиеся значения в выпадающем списке



если (! страница.IsPostBack)
{
regiondrop. DataSource = список;
regiondrop.DataTextField = " Регион";
regiondrop.DataValueField = " RID";
regiondrop.Привязку();

}

}

OriginalGriff

Да...вот почему в моем коде есть вызов First в foreach...
Если вы хотите использовать список напрямую, Измените выбор:

выберите newgroup.Первый();

Рейтинг:
19

Karthik_Mahalingam

попробовать это

var list1 = tea.t1.ToList();
     Dictionary<int, string> dict = new Dictionary<int, string>();
     foreach (var item in list1.OrderBy(k=>k.Region))
     {
         if(!dict.ContainsValue(item.Region))
         dict.Add(item.RegionID, item.Region);
     }
     var output = dict.Select(k => new { RegionId = k.Key, Region = k.Value }).ToList();

     egiondrop.DataSource = output;
     regiondrop.DataTextField = "Region";
     regiondrop.DataValueField = "RegionId";
     regiondrop.DataBind();


super_user

это показывает тот же вывод, что и повторяющиеся значения в выпадающем списке

Karthik_Mahalingam

опубликуйте код.

super_user

protected void Page_Load(отправитель объекта, EventArgs e)
{
Чай Т1 = Т1 новые();
ВАР список1 = чай.Т1.Список();
Словарь и Л;int, строка=""&ГТ; дикт = новый словарь и Л;int, строка=""&ГТ;();
foreach (var item in list1.Заказатьпо(к =&ГТ; к. Области))
{
если (! дикт.ContainsValue (item.Регион))
словарь.Добавить элемент.Либо, поз.Регион);
}
var output = dict.Выберите(к =&ГТ; новое { либо = к.Ключ, области = к.Значение }).Список();




если (! страница.IsPostBack)
{
regiondrop. DataSource = список;
regiondrop.DataTextField = " Регион";
regiondrop.DataValueField = " RegionID";
regiondrop.Привязку();

}

}

Karthik_Mahalingam

если (! страница.IsPostBack)
{
regiondrop.Источник данных = выход

Maciej Los

5ед!

Karthik_Mahalingam

Спасибо Мацей Лос

super_user

хорошо, это сделано, но я не понимаю этих строк.. Словарь и Л;int, строка=""&ГТ; дикт = новый словарь и Л;int, строка=""&ГТ;();
foreach (var item in list1.Заказатьпо(к=&ГТ;к. Области))
{
если (! дикт.ContainsValue (item.Регион))
словарь.Добавить элемент.Либо, поз.Регион);
}

super_user

есть ли другой простой способ ??

Karthik_Mahalingam

да доступно
разместите код класса для T1

super_user

///


/// Документация по метаданным отсутствует.
///

[EdmEntityTypeAttribute(Имя_пространства_имен="TrackDataModel", имя="Т1")]
[Упорядочиваемый()]
[DataContractAttribute(IsReference=true)]
общественный разделяемого класса Т1: EntityObject
{
#регион Заводской метод

///
/// Создание нового объекта Т1.
///

/// <имя парам="либо">По первоначальной стоимости либо собственность.&ЛТ;/парам и GT;
public static t1 Createt1(global:: System. Int32 regionID)
{
t1t1 = новый t1();
Т1.Либо = либо;
T1 возврата;
}

#endregion
#примитивные свойства региона

///
/// Документация по метаданным отсутствует.
///

[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
[Атрибут datamemberattribute()]
public global:: System. Int32 RegionID
{
получить
{
вернуться _RegionID;
}
набор
{
if (_RegionID != значение)
{
OnRegionIDChanging(значение);
ReportPropertyChanging ("RegionID");
_RegionID = StructuralObject.SetValidValue(значения);
ReportPropertyChanged ("RegionID");
OnRegionIDChanged();
}
}
}
private global:: System. Int32 _RegionID;
частичная пустота OnRegionIDChanging(global:: System.Int32 value);
частично недействительным OnRegionIDChanged();




///
/// Документация по метаданным отсутствует.
///

[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
[Атрибут datamemberattribute()]
публичная глобальная:: система.Струнная Область
{
получить
{
вернуться _Region;
}
набор
{
OnRegionChanging(значение);
ReportPropertyChanging ("Регион");
_Region = StructuralObject.SetValidValue(значение true);
ReportPropertyChanged ("Регион");
Метода onregionchanged();
}
}
частная глобальная:: система.Строка _Region;
частичная пустота OnRegionChanging(global:: System.Строковое значение);
частично недействительным метода onregionchanged();

///
/// Документация по метаданным отсутствует.
///

[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
[Атрибут datamemberattribute()]
общественного значения null&ЛТ;глобальный::системы.датавремя&ГТ; начальная дата
{
получить
{
вернуться _StartDate;
}
набор
{
OnStartDateChanging(значение);
ReportPropertyChanging("Начальная Дата");
_StartDate = StructuralObject.SetValidValue(значения);
ReportPropertyChanged("Начальная Дата");
OnStartDateChanged();
}
}
частная допускает значения null&ЛТ;глобальный::системы.датавремя&ГТ; _StartDate;
частично недействительным OnStartDateChanging(значения null&ЛТ;глобальный::системы.датавремя&ГТ; ценим);
частично недействительным OnStartDateChanged();

///
/// Документация по метаданным отсутствует.
///

[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
[Атрибут datamemberattribute()]
общественного значения null&ЛТ;глобальный::системы.датавремя&ГТ; конечная дата
{
получить
{
вернуться _EndDate;
}
набор
{
OnEndDateChanging(значение);
ReportPropertyChanging("Конечная Дата");
_EndDate = StructuralObject.SetValidValue(значения);
ReportPropertyChanged("Конечная Дата");
OnEndDateChanged() < div id= " Edit

Karthik_Mahalingam


T1 tea = new T1();
var list1 = tea.t1.ToList();
List<myregion> listRegion = new List<myregion>();
foreach (var item in list1.OrderBy(k => k.Region))
{
if (!listRegion.Any(k => k.Region == item.Region))
listRegion.Add(new MyRegion() { Region = item.Region, RegionId = item.RegionID });
}
regiondrop.DataSource = listRegion;
regiondrop.DataTextField = "Region";
regiondrop.DataValueField = "RegionID";
regiondrop.DataBind();

}

public class MyRegion
{
public int RegionId { get; set; }
public string Region { get; set; }
}
</myregion></myregion>




нажмите кнопку Изменить и посмотрите фактический код, некоторые теги могут быть обрублены.