C# WHERE IN子句作为对象实体框架
如果我有C# WHERE IN子句作为对象实体框架,c#,linq,entity-framework-6,C#,Linq,Entity Framework 6,如果我有公司对象: var companies = db.Companies.Where(...); 以及与公司对象一对多相关的用户对象: var users = db.Users.Where(...); 如何从user.company位于(company)中的用户中实现select*等标准 在阅读一些文章时,我尝试了以下方法: users.Where(x => companies.Contains(x.company)) 但似乎不起作用。我错过了什么 编辑 确切答案: public
公司
对象:
var companies = db.Companies.Where(...);
以及与公司对象一对多相关的用户对象:
var users = db.Users.Where(...);
如何从user.company位于(company)中的用户中实现select*等标准
在阅读一些文章时,我尝试了以下方法:
users.Where(x => companies.Contains(x.company))
但似乎不起作用。我错过了什么
编辑
确切答案:
public PartialViewResult IndexGrid(String search)
{
var companies = db.Users.Find(User.Identity.GetUserId()).Companies.AsQueryable();
Guid[] guids = companies.Select(c => c.Id).ToArray();
if (String.IsNullOrEmpty(search))
return PartialView("_IndexGrid", db.Set<Quotation>().OrderByDescending(x => x.Code).AsQueryable()
.Where(x => guids.Contains(x.Company.Id)));
else
return PartialView("_IndexGrid", db.Set<Quotation>().OrderByDescending(x => x.Code).AsQueryable()
.Where(x => guids.Contains(x.Company.Id))
.Where(x => x.Code.Contains(search)|| x.MasterCustomer.Name.Contains(search)));
}
public PartialViewResult索引网格(字符串搜索)
{
var companys=db.Users.Find(User.Identity.GetUserId()).companys.AsQueryable();
Guid[]guids=companys.Select(c=>c.Id).ToArray();
if(String.IsNullOrEmpty(搜索))
返回PartialView(“_IndexGrid”,db.Set().OrderByDescending(x=>x.Code).AsQueryable()
其中(x=>guids.Contains(x.Company.Id));
其他的
返回PartialView(“_IndexGrid”,db.Set().OrderByDescending(x=>x.Code).AsQueryable()
.Where(x=>guids.Contains(x.Company.Id))
其中(x=>x.Code.Contains(搜索)| | x.MasterCustomer.Name.Contains(搜索));
}
我想您需要为其ID选择:
var companies = db.Companies.Where(...);
var myUsers = db.Users.Where(w=>companies.Select(x=>x.Id).Contains(w.CompanyId)).ToList();
如果两者之间存在引用,则可以执行以下操作,例如:
var myUsers = db.Users.Include(x=>x.Company)
.Where(w=>w.Company != null && w.Company.Name == "MyCompanyName")
.ToList();
当您使用最后一个变量作为
users.Where(x => companies.Contains(x.company))
Net不知道如何比较公司,并使用对相等对象的引用。
如果您的公司有id属性,请尝试此操作。如果没有,请告诉我
users.Where(x => companies.Select(c => c.Id).Contains(x.company.Id))
你忘了告诉你的尝试什么“不起作用”。如果公司
是EF6IQueryable
,那么您的尝试实际上是有效的。如果它在内存IEnumerable
,那么您的尝试和当前的答案都会在运行时抛出NotSupportedException
。@IvanStoev:错误实际上来自其他插件说的类似于接受原语值。控制器本身没有抛出错误,但网格不工作。被接受的答案给了我一个工作的想法/我提出了一个确切的答案。