Как записать в переменную данные из combobox и использовать их в linq запросе к БД?
' string b;
public void Combo1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
b = combo1.Items[combo1.SelectedIndex].ToString();
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var query12 = (
from CPU in dataEntities.CPUs
where CPU.Manufacturer == a || CPU.Series == b
select new { CPU.Soket }).Distinct();
combo2.ItemsSource = query12.ToList();
}'
Ответы (1 шт):
Автор решения: Ivan Khorin
→ Ссылка
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;
namespace StackOverflow
{
public partial class Form1 : Form
{
private readonly List<string> _manufacturer = new List<string> { "Intel", "AMD" };
private readonly Dictionary<string, List<string>> _sockets = new Dictionary<string, List<string>>
{
{ "AMD", new List<string> { "AM2", "AM3", "AM4", } },
{ "Intel", new List<string> { "LGA1150", "LGA1151", } },
};
public Form1()
{
InitializeComponent();
comboBox1.DataSource = _manufacturer;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.Enabled = false;
try
{
var sockets = _sockets
.Where(x => x.Key == comboBox1.SelectedItem.ToString())
.Select(x => x.Value)
.FirstOrDefault();
comboBox2.DataSource = sockets;
}
finally
{
comboBox1.Enabled = true;
}
}
}
}
Вот рабочий пример (без БД). Не знаю форматы данных, которые ты тянешь с базы, так как вижу только часть кода. В данном случае тебе не нужно событие MainWindow_Load, потому что SelectedIndexChanged выполнится всё равно при первичной отрисовке, в нем и тяни из базы данные для заполнения comboBox2, в идеале асинхронно, конечно. Не помню уже, вызывает ли запрос к контексту исключение, но на всякий случай обернул в try/finally. Если больше подробностей приведёшь, доведём до ума твой код может :)