【发布时间】:2023-04-02 15:58:01
【问题描述】:
我有一个显示用户的视图。在该列表中,列值来自三个表。来自 mvc 应用程序的标准用户表,一个 Persons 表,它是用户表(Persons.UserId = Users.Id)的一堆附加信息,我有一个公司表,有些人有参考(Person.CompanyId = Company 。ID)。有些人没有相关公司。
所以我有这个 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;
}
【问题讨论】:
-
你试过这样:
from user in db.Users where user.FullName.Contains(searchString) || user.Email.Contains(searchString) || user.PhoneNumber.Contains(searchString) || user.Company.Contains(searchString) ...?你能解释一下什么东西不起作用以及怎么做吗? -
公司不在用户中。用户指向指向公司的人。这是两个关系:)
-
嗨,@FrankTKO,您能否发布表结构以获取未来建议的指针?
-
公司有人员名单还是只有人名
标签: c# asp.net-mvc database linq search