我有条件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 =2
和CriteriaValueID = 4
,那么LINQ to entity应返回用户ID 1,2。
实际上它可以是多个,如1. CriteriaID = 2和CriteriaValueID = 4 2. CriteriaID = 3和CriteriaValueID = 5.这里我有我们需要用户的标准列表
提前致谢。
答案 0 :(得分:1)
你有没有尝试过什么?
from c in Criteria
where c.CriteriaID = 2 && c.CriteriaValueID = 4
select c.User
这假设您在实体框架中创建的数据库和导航属性上定义了外键。
答案 1 :(得分:0)
这假设您拥有Criteria
对象和CompanyUser
对象,可能还有其他名称。
在示例中,我手动添加了Criteria
,但我假设您将添加一些内容,然后添加Criteria
,Users
。CriteriaID
。如果您只比较CriteriaValueID
和UserID
,CompanyID
和CriteriaID
似乎是多余的,除了使用// 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}}