Не дает ожидаемых результатов в запросе LINQC#

Место общения программистов C#
Anonymous
Не дает ожидаемых результатов в запросе LINQ

Сообщение Anonymous »

Я новичок в LINQ и пытаюсь получить результаты ComboBox Win Form для заполнения другого ComboBox. Когда я нажимаю на нужный ComboBox, ничего не появляется. Кто-нибудь хочет взглянуть на мой код и посмотреть, где я ошибаюсь? Заранее большая признательность. Примечание. На рисунке показан тип местоположения, выбранный как «Родной город». В поле под ним должен быть указан фактический родной город, например Сан-Антонио.

Код: Выделить всё

private void LocationComboBox_DropDown(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(lastNameTextBox.Text))
{
using PersonsContext dbContext = new PersonsContext();
List filteredResults = new List();

var tempResults = dbContext.Persons
.Where(a => EF.Functions.Collate(a.LastName, "NOCASE") == lastNameTextBox.Text)
.GetType()
.GetProperties()
.Where(a => a.Name == locationTypeComboBox.Text)
.Select(a => a.GetValue(a, null)).FirstOrDefault();
if (tempResults != null)
{

filteredResults.Add(tempResults.ToString());
filteredResults.Sort();
filteredResults = filteredResults.Distinct().ToList();
locationComboBox.Items.Clear();
locationComboBox.Items.AddRange([.. filteredResults]);
locationComboBox.Items.Remove(String.Empty);
}
}
else
{
// todo:
}
}
Изображение

Отредактировано: Обновление: мне удалось использовать пример кода, написанный @Fildor (спасибо), и следующее работает:

Код: Выделить всё

   private void LocationComboBox_DropDown(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(lastNameTextBox.Text))
{
var projections = new Dictionary()
{
[nameof(Person.LastName)] = p => p.LastName,
[nameof(Person.Hometown)] = p => p.Hometown,
[nameof(Person.County)] = p => p.County,
[nameof(Person.State)] = p => p.State,
[nameof(Person.Country)] = p => p.Country
};

var projection = projections[locationTypeComboBox.Text];

using PersonsContext dbContext = new PersonsContext();
List filteredResults = new List();

var test = dbContext.Persons
.Where(a => EF.Functions.Collate(a.LastName, "NOCASE") == lastNameTextBox.Text)
.Select(projection)
.FirstOrDefault();

if (test != null)
{
filteredResults.Add(test.ToString());
filteredResults.Sort();
filteredResults = filteredResults.Distinct().ToList();
locationComboBox.Items.Clear();
locationComboBox.Items.AddRange([.. filteredResults]);
locationComboBox.Items.Remove(String.Empty);
}
}
else
{
// todo:
}
}
Изображение
Спасибо Вам еще раз за Ваш труд и помощь в этом!

Подробнее здесь: https://stackoverflow.com/questions/790 ... linq-query

Вернуться в «C#»