Задать вопрос

Как составить LINQ запрос?

У меня два вопроса :

1) Есть связные данные, которые заполняются на одной форме и одним нажатием кнопки заносятся в БД. Они связаны по ID, но в момент добавления записи в базу я его не знаю, а потому без понятия, что записывать в дочернюю таблицу. Скажите, можно ли после добавления записи в главной таблице, посредством LINQ узнать ID последней добавленной записи? Ну или как это делается иначе...
2) Мне нужно извлечь данные из двух таблиц и сравнить одно из полей этих таблиц со свойством SelectedValuePath компонента ComboBox (WPF), суть в том что при изменении итема в ComboBox появляются связные с этим итемом записи...

Вот мой код:
var perforList = from p in context.performers
join o in context.orderperformer on p.performerID equals o.perfromerID
 //where o.serviceID == Convert.ToInt32(comboBoxServices.SelectedValuePath)
select new { p.secondName, p.firstName, p.patronymic, o.price };


Строчка, которую я закомментил, вызывает исключение... Уж простите, я крайне неопытен, посему и прошу у вас совета.
Заранее премного благодарен.
  • Вопрос задан
  • 3216 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
1) Допустим, что
public class Company
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Employee> Employees { get; set; }

}

public class Employee
{
    public int Id { get; set; }
    public string FirstName { get; set; }
}

Тогда сохранить можно примерно так:
int employeeId;
int companyId;
using (var context = new EntitiesContext())
{
    var employee = new Employee { FirstName = "John" };
    var company = new Company { Name = "Contoso" };
    company.Employees.Add(employee);
    context.Companies.Add(company);

    context.SaveChanges();

    employeeId = employee.Id;
    companyId = company.Id;
}

После SaveChanges() появятся айдишники, если они еще нужны где-то дальше (записи уже будут связаны в БД).

2. Если падает исключение, то пишите исключение в вопросе. Скорее всего 'LINQ to Entities does not recognize the method 'Int32 ToInt32 (System.String)','.
Делайте преобразование в число, вне LINQ,
var idInt = Convert.ToInt32(comboBoxServices.SelectedValuePath);
var perforList = from p in context.performers
join o in context.orderperformer on p.performerID equals o.perfromerID
 where o.serviceID == idInt
select new { p.secondName, p.firstName, p.patronymic, o.price };
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы