我有一个类似于键值对设计结构的表。我想根据键和值查询表,但我遇到了一些问题。下面是我的表结构和预期输出。
表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”进行过滤。但我无法成功。
答案 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>