Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WHERE IN子句作为对象实体框架_C#_Linq_Entity Framework 6 - Fatal编程技术网

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))

你忘了告诉你的尝试什么“不起作用”。如果
公司
是EF6
IQueryable
,那么您的尝试实际上是有效的。如果它在内存
IEnumerable
,那么您的尝试和当前的答案都会在运行时抛出
NotSupportedException
。@IvanStoev:错误实际上来自其他插件说的类似于接受原语值。控制器本身没有抛出错误,但网格不工作。被接受的答案给了我一个工作的想法/我提出了一个确切的答案。