LINQ to Entity过滤其他表的多行

时间:2013-04-15 12:26:23

标签: c# entity-framework

我有条件CriteriaID,CriteriaValueID,UserId,companyid的Criteria表。其他表格为UserMaster,字段为UserID,UserName,Email。 现在,在Criteria表中,一个用户有多个行用于多个条件。这里的行数是动态的。我正在使用LINQ to Entity。我需要使用criteriavalueid和criteriaid使用和表达式搜索用户。

E.g.
companyid UserID UserName 
1          1       ABC
1          2       BCD
2          3       CDE
CriteriaID CriteriaValueID UserId companyid
1           1               1       1
2           4               1       1
3           9               1       1
1           2               2       1
2           4               2       1

当我搜索时,我想要用户CriteriaID =2CriteriaValueID = 4,那么LINQ to entity应返回用户ID 1,2。 实际上它可以是多个,如1. CriteriaID = 2和CriteriaValueID = 4 2. CriteriaID = 3和CriteriaValueID = 5.这里我有我们需要用户的标准列表

提前致谢。

2 个答案:

答案 0 :(得分:1)

你有没有尝试过什么?

from c in Criteria
where c.CriteriaID = 2 && c.CriteriaValueID = 4
select c.User

这假设您在实体框架中创建的数据库和导航属性上定义了外键。

答案 1 :(得分:0)

这假设您拥有Criteria对象和CompanyUser对象,可能还有其他名称。

在示例中,我手动添加了Criteria,但我假设您将添加一些内容,然后添加CriteriaUsersCriteriaID。如果您只比较CriteriaValueIDUserIDCompanyIDCriteriaID似乎是多余的,除了使用// Create a list of Criteria List<Criteria> ListOfCriteria = new List<Criteria>(); // Add Criteria where Criteria ID = 2 and CriteriaValueID = 4 and Criteria ID = 2 // Adding Criteria objects instead of retrieval for example, you want to retrieve the Criteria object from your existing list ListOfCriteria.Add(new Criteria() { CriteriaID = 2, CriteriaValueID = 4, CompanyID = 1, UserID = 1 }); ListOfCriteria.Add(new Criteria() { CriteriaID = 1, CriteriaValueID = 1, CompanyID = 1, UserID = 1 }); // Create a list of your users List<CompanyUser> ListOfUsers = new List<CompanyUser>(); // The below is to add users as shown in your example, ideally, you will be pulling your User object from database ListOfUsers.Add(new CompanyUser() { CompanyID = 1, UserID = 1, UserName = "ABC" }); ListOfUsers.Add(new CompanyUser() { CompanyID = 1, UserID = 2, UserName = "BCD" }); ListOfUsers.Add(new CompanyUser() { CompanyID = 2, UserID = 3, UserName = "CDE" }); // Retrieve a single user that matches all your requirements CompanyUser RetrievedUser = ListOfUsers.Where(a => ListOfCriteria.All(b => b.UserID == a.UserID && b.CompanyID == a.CompanyID)).FirstOrDefault(); if(RetrievedUser == null) MessageBox.Show("No user found"); else MessageBox.Show(RetrievedUser.UserName); 作为唯一标识符或主键

{{1}}