簡體   English   中英

WHERE IN子句AS對象實體框架

[英]WHERE IN clause AS object Entity Framework

如果我有一個Company對象:

var companies = db.Companies.Where(...);

而一個User ,其涉及到的對象Company對象one-to-many

var users = db.Users.Where(...);

我如何才能達到諸如select * from users where user.company in (company)的標准

閱讀一些文章,我嘗試過類似的方法:

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

當您將最后一個變體用作

users.Where(x => companies.Contains(x.company))

.Net不知道如何比較公司,並使用對相等對象的引用。 如果您的公司具有ID財產,請嘗試此操作。 如果沒有,請告訴我。

users.Where(x => companies.Select(c => c.Id).Contains(x.company.Id))

我想您需要為其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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM