0

我有一个使用 EAV 设计表的情况,我是这个设计的新手,我对选择查询感到震惊。下面是我的查询结构和数据。

TABLE1:
 Id KeyName
 1  Name
 2  Age

TABLE2:
ID  TABLE1_ID VALUE
 1    1        ABC
 2    2        12
 3    1        CDF
 4    2        14    
 5    1        XYZ
 6    2        13
 7    1        CSF
 8    2        10 

EXPECTED OUTPUT: Get all the values which are greater than 12 AND Value contains "C".
i.e., 
  Table2_ID  Result  Table1_KeyName
       1      ABC      Name
       2      12       Age
       3      CDF      Name
       4      14       Age

我尝试过的选项是:

        Var temp = (from c in Table2
                    where c.Value > 12 && c.Table1.KeyName.Contains("C")
                    Select new
                   {
                    ID = c.ID,
                    Result = C.Value
                   }); 

上面的查询没有返回任何结果,因为过滤器(在 where 子句中)是跨行的。我什至在 where 子句中尝试了“OR”条件,它返回了我所有的东西。请帮帮我。

4

1 回答 1

1

您的查询是错误的,您是在此处输入还是从您的工作中复制粘贴?

您是否在诸如实体框架之类的 ORM 中设置了此表?这样在 table1 和 table2 之间就建立了关系,所以你不必“加入”它们?

为了更“正确”,它应该是......

    Var temp = (from c in Table2
                where c.Value > 12 && c.Table1.Name.Contains("C")
                Select new
               {
                ID = c.ID,
                Name = c.Table1.Name,
                Value = c.Value
               });

或者,如果关系不在 ORM 中,您的 using 明确指定连接,如下所示:

    Var temp = (from c in Table2
                join c1 in Table1 on c.Table1_ID equals c1.Id
                where c.Value > 12 && c.Table1.Name.Contains("C")
                Select new
               {
                ID = c.ID,
                Name = c.Table1.Name,
                Value = c.Value
               });

编辑:那么它应该是 OR,而不是 AND

    Var temp = (from c in Table2
                where c.Value > 12 || c.Value.Contains("C")
                Select new
               {
                ID = c.ID,
                Result = c.Value,
                KeyName = c.Table1.Name
               });
于 2013-10-31T09:33:02.503 回答