使用EF查询键值对设计表

时间:2013-10-23 13:28:34

标签: c# sql linq entity-framework

我有一个类似于键值对设计结构的表。我想根据键和值查询表,但我遇到了一些问题。下面是我的表结构和预期输出。

  

表1:

     

ID KEY VALUE

1   NAME        abc
2   AGE         12
3   DEPARTMENT  CCB
4   NAME        xyz
5   AGE         13
6   DEPARTMENT  TSS
7   NAME        cde
8   AGE         12
9   DEPARTMENT  TMS
Table 2:

KeyId KeyName
1      Name
2      Department
3      Age

为了便于理解我直接输入了表1中的键名,实际上表1和表2之间存在外键关系。

表2也可以包含任何名称,不一定是姓名,部门和年龄。

预期输出为:我需要获取名称包含%c%和年龄= 12的数据。

     Name Age Department
     abc  12  CCB
     cde  12  TMS 

注意:我正在寻找一个EF解决方案,即linq查询,而不是sql查询。

我尝试过的选项,下面是查询:

var temp = (from c in table1               where c.Name.Contains("C") || C.Age == 12         Select new { C.Name, C.Age })

考虑应用“OR”条件以便我满足条件,然后在从数据库中获取数据后在内存中使用“AND”进行过滤。但我无法成功。

1 个答案:

答案 0 :(得分:0)

试试这个:

var result = input.Select((x,i)=>new {x,i})
                  .GroupBy(a=>a.i/3)
                  .Where(g=>g.FirstOrDefault().x.Value.Contains("c") &&
                            Convert.ToInt32(g.Skip(1).FirstOrDefault().x.Value) == 12)
                  .Select(g=> new {
                             Name = g.FirstOrDefault().x.Value,
                             Age = Convert.ToInt32(g.Skip(1).FirstOrDefault().x.Value),
                             Department = g.Skip(2).FirstOrDefault().x.Value
                          });

不确定它是否在EF中有效,但如果没有,则必须在客户端使用AsEnumerable()执行查询,然后在input之后附加任何方法。< / p>