我应该如何正确地编写我的Linq查询,其中条件设置为外部实体

时间:2011-03-08 18:48:58

标签: linq linq-to-sql orm sqlmetal dblinq

以下是用于解释此事的样本数据:

tblPrimary
1, John, 2011-01-03T11:12:00z
2, John, 2011-02-04T10:54:12z

tblDetail:
1, 1, 14, Dept01
2, 1, 12, Dept02
3, 2, 10, Dept03
4, 2, 17, Dept04

使用上面的示例表,给出了一个“名称”,我需要返回与tblPrimary.Name中的名称关联的每个详细记录。 tblPrimary.Name不是唯一的,因此会有重复项,但它们实际上是不同的行项目,因为它们具有不同的日期和时间。时间。

使用SQLMetal生成代码,以便对象处理两个表之间的关系。记住这一点,我按如下方式构建查询:

var q = from i in dbcontext.tblDetail
where i.tblPrimary.Name == 'John' && i.PrimaryId == i.tblPrimary.PrimaryId
select i;

使用上面的示例数据,如果我在tblPrimary中有两个具有不同DateAdded的“John”,并且在每个John的tblDetail中有2个记录,则查询返回的结果为:

John - 2011-01-03T11:12:00z
1, 1, 14, Dept01
2, 1, 12, Dept02
3, 2, 10, Dept03
4, 2, 17, Dept04
John - 2011-02-04T10:54:12z
1, 1, 14, Dept01
2, 1, 12, Dept02
3, 2, 10, Dept03
4, 2, 17, Dept04

我真正想要的结果是:

John - 2011-01-03T11:12:00z
1, 1, 14, Dept01
2, 1, 12, Dept02
John - 2011-02-04T10:54:12z
3, 2, 10, Dept03
4, 2, 17, Dept04

有人可以建议我如何在不使用连接的情况下解决这个Linq查询吗?我假设两个表之间的sqlmetal生成的关系应该已经为我处理连接。

1 个答案:

答案 0 :(得分:0)

嗯,看看这部分问题:

i.PrimaryId == i.tblPrimary.PrimaryId

tblPrimary属性的定义方式是此表达式始终为true。


  

有人可以建议我如何在不使用连接的情况下解决这个Linq查询吗?

这个怎么样?

var q =
   from i in  dbcontext.tblDetail 
   let j = i.tblPrimary
   select new {Detail = i, Primary = j};