using System;
using System.Linq;
class Program {
static void Main() {
var query=new[] {
new { Id=1,Numero=285287 }, // Auditoria.Id=11 -> Maquina.Id=102 -> Maquina.Name="C" // position 2
new { Id=2,Numero=562974 }, // Auditoria.Id=12 -> Maquina.Id=118 -> Maquina.Name="S" // position 3b
new { Id=5,Numero=185720 }, // Auditoria.Id=15 -> Maquina.Id=100 -> Maquina.Name="A" // position 1
new { Id=7,Numero=302703 }, // Auditoria.Id=17 -> Maquina.Id=118 -> Maquina.Name="S" // position 3a
};
var ItemAuditoria=new[] {
new { Acao=new { Id=1 },Auditoria=new { Id=11 } },
new { Acao=new { Id=2 },Auditoria=new { Id=12 } },
new { Acao=new { Id=3 },Auditoria=new { Id=13 } },
new { Acao=new { Id=4 },Auditoria=new { Id=14 } },
new { Acao=new { Id=5 },Auditoria=new { Id=15 } },
new { Acao=new { Id=6 },Auditoria=new { Id=16 } },
new { Acao=new { Id=7 },Auditoria=new { Id=17 } },
new { Acao=new { Id=8 },Auditoria=new { Id=18 } },
new { Acao=new { Id=9 },Auditoria=new { Id=19 } },
};
var Auditoria=new[] {
new { Id=11,Maquina=new { Id=102 } },
new { Id=12,Maquina=new { Id=118 } },
new { Id=13,Maquina=new { Id=104 } },
new { Id=14,Maquina=new { Id=100 } },
new { Id=15,Maquina=new { Id=100 } },
new { Id=16,Maquina=new { Id=122 } },
new { Id=17,Maquina=new { Id=118 } },
new { Id=18,Maquina=new { Id=100 } },
new { Id=19,Maquina=new { Id=100 } },
};
var Maquina=new[] {
new { Id=100,Nome="A" },
new { Id=101,Nome="B" },
new { Id=102,Nome="C" },
new { Id=103,Nome="D" },
new { Id=104,Nome="E" },
new { Id=105,Nome="F" },
new { Id=106,Nome="G" },
new { Id=107,Nome="H" },
new { Id=108,Nome="I" },
new { Id=109,Nome="J" },
new { Id=110,Nome="K" },
new { Id=111,Nome="L" },
new { Id=112,Nome="M" },
new { Id=113,Nome="N" },
new { Id=114,Nome="O" },
new { Id=115,Nome="P" },
new { Id=116,Nome="Q" },
new { Id=117,Nome="R" },
new { Id=118,Nome="S" },
new { Id=119,Nome="T" },
new { Id=120,Nome="U" },
new { Id=121,Nome="V" },
new { Id=122,Nome="W" },
new { Id=123,Nome="X" },
new { Id=124,Nome="Y" },
new { Id=125,Nome="Z" },
};
query=(
from distinctAcao in (
from acao in query
join itemAuditoria in ItemAuditoria on acao.Id equals itemAuditoria.Acao.Id
join auditoria in Auditoria on itemAuditoria.Auditoria.Id equals auditoria.Id
join maquina in Maquina on auditoria.Maquina.Id equals maquina.Id
orderby maquina.Nome,acao.Numero
select acao
).Distinct()
select distinctAcao
).ToArray();
foreach(var q in query) Console.WriteLine("Id={0} Numero={1}",q.Id,q.Numero);
Console.ReadKey(true);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKCgoKY2xhc3MgUHJvZ3JhbSB7CglzdGF0aWMgdm9pZCBNYWluKCkgewoJCXZhciBxdWVyeT1uZXdbXSB7CgkJCW5ldyB7IElkPTEsTnVtZXJvPTI4NTI4NyB9LCAvLyBBdWRpdG9yaWEuSWQ9MTEgLT4gTWFxdWluYS5JZD0xMDIgLT4gTWFxdWluYS5OYW1lPSJDIiAvLyBwb3NpdGlvbiAyCgkJCW5ldyB7IElkPTIsTnVtZXJvPTU2Mjk3NCB9LCAvLyBBdWRpdG9yaWEuSWQ9MTIgLT4gTWFxdWluYS5JZD0xMTggLT4gTWFxdWluYS5OYW1lPSJTIiAvLyBwb3NpdGlvbiAzYgoJCQluZXcgeyBJZD01LE51bWVybz0xODU3MjAgfSwgLy8gQXVkaXRvcmlhLklkPTE1IC0+IE1hcXVpbmEuSWQ9MTAwIC0+IE1hcXVpbmEuTmFtZT0iQSIgLy8gcG9zaXRpb24gMQoJCQluZXcgeyBJZD03LE51bWVybz0zMDI3MDMgfSwgLy8gQXVkaXRvcmlhLklkPTE3IC0+IE1hcXVpbmEuSWQ9MTE4IC0+IE1hcXVpbmEuTmFtZT0iUyIgLy8gcG9zaXRpb24gM2EKCQl9OwoKCQl2YXIgSXRlbUF1ZGl0b3JpYT1uZXdbXSB7CgkJCW5ldyB7IEFjYW89bmV3IHsgSWQ9MSB9LEF1ZGl0b3JpYT1uZXcgeyBJZD0xMSB9IH0sCgkJCW5ldyB7IEFjYW89bmV3IHsgSWQ9MiB9LEF1ZGl0b3JpYT1uZXcgeyBJZD0xMiB9IH0sCgkJCW5ldyB7IEFjYW89bmV3IHsgSWQ9MyB9LEF1ZGl0b3JpYT1uZXcgeyBJZD0xMyB9IH0sCgkJCW5ldyB7IEFjYW89bmV3IHsgSWQ9NCB9LEF1ZGl0b3JpYT1uZXcgeyBJZD0xNCB9IH0sCgkJCW5ldyB7IEFjYW89bmV3IHsgSWQ9NSB9LEF1ZGl0b3JpYT1uZXcgeyBJZD0xNSB9IH0sCgkJCW5ldyB7IEFjYW89bmV3IHsgSWQ9NiB9LEF1ZGl0b3JpYT1uZXcgeyBJZD0xNiB9IH0sCgkJCW5ldyB7IEFjYW89bmV3IHsgSWQ9NyB9LEF1ZGl0b3JpYT1uZXcgeyBJZD0xNyB9IH0sCgkJCW5ldyB7IEFjYW89bmV3IHsgSWQ9OCB9LEF1ZGl0b3JpYT1uZXcgeyBJZD0xOCB9IH0sCgkJCW5ldyB7IEFjYW89bmV3IHsgSWQ9OSB9LEF1ZGl0b3JpYT1uZXcgeyBJZD0xOSB9IH0sCgkJfTsKCgkJdmFyIEF1ZGl0b3JpYT1uZXdbXSB7CgkJCW5ldyB7IElkPTExLE1hcXVpbmE9bmV3IHsgSWQ9MTAyIH0gfSwKCQkJbmV3IHsgSWQ9MTIsTWFxdWluYT1uZXcgeyBJZD0xMTggfSB9LAoJCQluZXcgeyBJZD0xMyxNYXF1aW5hPW5ldyB7IElkPTEwNCB9IH0sCgkJCW5ldyB7IElkPTE0LE1hcXVpbmE9bmV3IHsgSWQ9MTAwIH0gfSwKCQkJbmV3IHsgSWQ9MTUsTWFxdWluYT1uZXcgeyBJZD0xMDAgfSB9LAoJCQluZXcgeyBJZD0xNixNYXF1aW5hPW5ldyB7IElkPTEyMiB9IH0sCgkJCW5ldyB7IElkPTE3LE1hcXVpbmE9bmV3IHsgSWQ9MTE4IH0gfSwKCQkJbmV3IHsgSWQ9MTgsTWFxdWluYT1uZXcgeyBJZD0xMDAgfSB9LAoJCQluZXcgeyBJZD0xOSxNYXF1aW5hPW5ldyB7IElkPTEwMCB9IH0sCgkJfTsKCgkJdmFyIE1hcXVpbmE9bmV3W10gewoJCQluZXcgeyBJZD0xMDAsTm9tZT0iQSIgfSwKCQkJbmV3IHsgSWQ9MTAxLE5vbWU9IkIiIH0sCgkJCW5ldyB7IElkPTEwMixOb21lPSJDIiB9LAoJCQluZXcgeyBJZD0xMDMsTm9tZT0iRCIgfSwKCQkJbmV3IHsgSWQ9MTA0LE5vbWU9IkUiIH0sCgkJCW5ldyB7IElkPTEwNSxOb21lPSJGIiB9LAoJCQluZXcgeyBJZD0xMDYsTm9tZT0iRyIgfSwKCQkJbmV3IHsgSWQ9MTA3LE5vbWU9IkgiIH0sCgkJCW5ldyB7IElkPTEwOCxOb21lPSJJIiB9LAoJCQluZXcgeyBJZD0xMDksTm9tZT0iSiIgfSwKCQkJbmV3IHsgSWQ9MTEwLE5vbWU9IksiIH0sCgkJCW5ldyB7IElkPTExMSxOb21lPSJMIiB9LAoJCQluZXcgeyBJZD0xMTIsTm9tZT0iTSIgfSwKCQkJbmV3IHsgSWQ9MTEzLE5vbWU9Ik4iIH0sCgkJCW5ldyB7IElkPTExNCxOb21lPSJPIiB9LAoJCQluZXcgeyBJZD0xMTUsTm9tZT0iUCIgfSwKCQkJbmV3IHsgSWQ9MTE2LE5vbWU9IlEiIH0sCgkJCW5ldyB7IElkPTExNyxOb21lPSJSIiB9LAoJCQluZXcgeyBJZD0xMTgsTm9tZT0iUyIgfSwKCQkJbmV3IHsgSWQ9MTE5LE5vbWU9IlQiIH0sCgkJCW5ldyB7IElkPTEyMCxOb21lPSJVIiB9LAoJCQluZXcgeyBJZD0xMjEsTm9tZT0iViIgfSwKCQkJbmV3IHsgSWQ9MTIyLE5vbWU9IlciIH0sCgkJCW5ldyB7IElkPTEyMyxOb21lPSJYIiB9LAoJCQluZXcgeyBJZD0xMjQsTm9tZT0iWSIgfSwKCQkJbmV3IHsgSWQ9MTI1LE5vbWU9IloiIH0sCgkJfTsKCgkJcXVlcnk9KAoJCQlmcm9tIGRpc3RpbmN0QWNhbyBpbiAoCgkJCQlmcm9tIGFjYW8gaW4gcXVlcnkKCQkJCWpvaW4gaXRlbUF1ZGl0b3JpYSBpbiBJdGVtQXVkaXRvcmlhIG9uIGFjYW8uSWQgZXF1YWxzIGl0ZW1BdWRpdG9yaWEuQWNhby5JZAoJCQkJam9pbiBhdWRpdG9yaWEgaW4gQXVkaXRvcmlhIG9uIGl0ZW1BdWRpdG9yaWEuQXVkaXRvcmlhLklkIGVxdWFscyBhdWRpdG9yaWEuSWQKCQkJCWpvaW4gbWFxdWluYSBpbiBNYXF1aW5hIG9uIGF1ZGl0b3JpYS5NYXF1aW5hLklkIGVxdWFscyBtYXF1aW5hLklkCgkJCQlvcmRlcmJ5IG1hcXVpbmEuTm9tZSxhY2FvLk51bWVybwoJCQkJc2VsZWN0IGFjYW8KCQkJKS5EaXN0aW5jdCgpCgkJCXNlbGVjdCBkaXN0aW5jdEFjYW8KCQkpLlRvQXJyYXkoKTsKCgkJZm9yZWFjaCh2YXIgcSBpbiBxdWVyeSkgQ29uc29sZS5Xcml0ZUxpbmUoIklkPXswfSBOdW1lcm89ezF9IixxLklkLHEuTnVtZXJvKTsKCQlDb25zb2xlLlJlYWRLZXkodHJ1ZSk7Cgl9Cn0=