У меня есть представление, отображающее пользователей. В этом списке значения столбцов взяты из трех таблиц. Стандартная таблица Users из приложений mvc, таблица Persons, которая представляет собой набор дополнительной информации к таблице Users (Persons.UserId = Users.Id), и у меня есть таблица Companies, на которую ссылаются некоторые лица (Person.CompanyId = Company .Я бы). У некоторых лиц нет связанных компаний.
Итак, у меня есть это заявление Linq, которое возвращает всех людей на мой взгляд:
var query = from user in db.Users
join person in db.Persons on user.Id equals person.UserID
join company in db.Companies on person.CompanyId equals company.ID into companyResult
from company in companyResult.DefaultIfEmpty()
select new PersonIndexItem { ID = person.ID, Name = user.FullName, Phone = user.PhoneNumber, Email = user.Email, Company = company == null ? "" : company.Name };
Это прекрасно работает, у меня есть все мои пользователи и пользователи, которые не имеют отношения к компании, просто не имеют ничего в столбце компании.
На мой взгляд, у меня есть окно поиска, которое соответствует большей части отображаемого поля. Это оператор linq, который я использую:
var query = from user in db.Users where user.FullName.Contains(searchString) || user.Email.Contains(searchString) || user.PhoneNumber.Contains(searchString)
join person in db.Persons on user.Id equals person.UserID
join company in db.Companies on person.CompanyId equals company.ID into companyResult
from company in companyResult.DefaultIfEmpty()
select new PersonIndexItem { ID = person.ID, Name = user.FullName, Phone = user.PhoneNumber, Email = user.Email, Company = company == null ? "" : company.Name };
Это прекрасно работает, если я наберу строку, она будет возвращать все записи, которые содержат эту строку в имени пользователя, телефоне или электронной почте.
Но я бы хотел добавить поиск в Компанию (Имя), поэтому, если я введу название компании, я получу всех пользователей из этой компании.
Я просто не могу заставить это работать. Есть идеи?
РЕДАКТИРОВАТЬ Для тех, кто интересуется, структура данных выглядит следующим образом:
// Users table
class User
{
int Id;
string FullName;
string Email;
string PhoneNumber;
}
// Persons table
class Person
{
int Id;
int UserId; // Users table
int CompanyId; // Companies table
}
// Companies table
class Company
{
int Id;
string Name;
}