Использование значений поиска в linq для запросов сущностей - PullRequest
2 голосов
/ 23 сентября 2011

Я абсолютный новичок в LINQ, поэтому, наверное, вам будет весело посмеяться над этим вопросом.Я изучаю LINQ для создания запросов в LightSwitch, и мне кажется, что я не понимаю, как выбрать объект на основе значения в таблице поиска.Скажем, я хочу выбрать всех сотрудников в таблице с названием должности, которое выбрано из соответствующей таблицы поиска.Я хочу, чтобы описательное значение в таблице поиска для пользователя выбиралось из списка для использования в качестве параметра в запросе, а не для неописательного идентификатора.

Может кто-нибудь указать мне статью или учебник, которые быстроОбъясните это или дайте быстрый ответ?Я читаю книги и у меня есть учетная запись Pluralsight, но поскольку это, вероятно, самые обширные знания, которые мне понадобятся на данный момент, простое руководство поможет мне больше, чем просмотр часов видео и чтение тысяч страниц книг.

Спасибозаранее!

Редактировать: это код.Насколько я знаю, это должно, но не сработает (красная волнистая линия в EmployeeTitle, ошибка говорит о том, что EmployeeContract не содержит определения EmployeeTitle, даже если между ними есть связь).

partial void ActiveEngineers_PreprocessQuery(ref IQueryable<Employee> query)
    {
        query = from Employee e in query
                where e.EmployeeContract.EmployeeTitle.Description == "Engineer"
                select e;
    }

Редактировать 2: это работает!Но почему этот, а не другой?

    partial void ActiveContracts_PreprocessQuery(ref IQueryable<EmployeeContract> query)
    {
        query = from EmployeeContract e in query
                where e.EmployeeTitle.Description == "Engineer"
                select e;
    }

Ответы [ 3 ]

0 голосов
/ 26 сентября 2011

Предполагая, что у вас есть свойства навигации для внешнего ключа к таблице поиска, это должно быть что-то вроде:

var allMonkies = from employee in context.Employees
                 where employee.EmployeeTitle.FullTitle == "Code Monkey"
                 select employee;

Если у вас нет свойства навигации, вы все равно можете получить его через «ручное» соединение:

var allMonkies = from employee in context.Employees
                 join title in context.EmployeeTitles
                     on employee.EmployeeTitleID equals title.ID
                 where title.FullTitle == "Code Monkey"
                 select employee;
0 голосов
/ 26 сентября 2011

Красная волнистая линия, которую вы описали, вероятнее всего потому, что у каждого сотрудника может быть 1-ко-многим EmployeeContracts.Следовательно, Employee.EmployeeContracts на самом деле IEnumerable<EmployeeContract>, который, в свою очередь, не имеет свойства EmployeeTitle.

Я думаю, что вы ищете может быть:

partial void ActiveEngineers_PreprocessQuery(ref IQueryable<Employee> query) 
{ 
    query = from Employee e in query 
            where e.EmployeeContract.Any(x => x.EmployeeTitle.Description == "Engineer") 
            select e; 
} 

Это говорит о том, что хотя бы один из контрактов EmployeeConnect сотрудника должен иметь EmployeeTitle.Description == "Engineer"

0 голосов
/ 26 сентября 2011

Попробуйте что-то вроде этого:

partial void RetrieveCustomer_Execute()
{
    Order order = this.DataWorkspace.NorthwindData.Orders_Single
        (Orders.SelectedItem.OrderID);

    Customer cust = order.Customer;
    //Perform some task on the customer entity.

}

(http://msdn.microsoft.com/en-us/library/ff851990.aspx#ReadingData)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...