2011-03-08 19 views
0

以下是说明这件事情的目的,样本数据:我应该如何正确撰写我的LINQ查询在条件设置为外国实体

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,和2条在tblDetail每个约翰,返回结果经查询是:

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生成的关系应该处理已经为我的连接。

回答

0

嗯,这个查询的这个部分:

i.PrimaryId == i.tblPrimary.PrimaryId 

的tblPrimary属性是这样定义的,这种表达总是如此。


任何人都可以建议我如何解决,而无需使用连接本Linq查询?

这个怎么样?

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