-1

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

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 = 4LINQ to entity 应该返回用户 ID 1,2。实际上它可以是多个,例如 1. CriteriaID =2 和 CriteriaValueID = 4 2. CriteriaID =3 和 CriteriaValueID = 5。这里我有我们需要用户的标准列表

提前致谢。

4

2 回答 2

1

你有没有试过什么?

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

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

于 2013-04-15T12:30:19.907 回答
0

这是假设你有你的Criteria对象和CompanyUser对象,可能命名为别的东西。

在示例中,我是Criteria手动添加的,但我假设您将拥有一些添加所需的东西,Criteria然后类似Users. 似乎CriteriaIDandCriteriaValueID是多余的,如果您只比较UserIDand 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);
于 2013-04-15T13:54:36.257 回答