2016-03-21 4 views
0

J'ai une requête sql qui me donnera environ 30 enregistrement, mais la même requête une fois que je suis passé à linq requête son en me donnant des milliers d'enregistrements. Je ne peux pas trouver la cause réelle du problème peut me aider ...requête Linq obtient plus d'enregistrements que la requête sql

sql requête

  select 
DLId = p.Id, 
TopicId = st.Id, 
TopicName = at.Name, 
PrimaryOrg = bo.BusinessUnit, 
StatusId = ns.ID, 
ModifiedBy = pa.LastName 

from STopics st 
join ATopics at on st.Id = at.Id 
join Students p on st.StudentId = p.Id 
join Sorgs sbu on at.BUorgID = sbu.BUOrgID 
join BOrgs bo on sbu.BUOrgID = bo.ID 
join Status ns on st.SID = ns.ID 
join Students pa on st.NominatedBy = pa.Email 
where p.IsActive = 1 and sbu.StudentID = 123 and sbu.IsActive = 1 

et la requête LINQ est

(from st in Context.STopics 
join at in Context.ATopics on st.Id equals at.Id 
join p in Context.Students on st.StudentId equals p.Id 
join sbu in Context.Sorgs on at.BUorgID equals sbu.BUOrgID 
join bo in Context.BOrgs on sbu.BUOrgID equals bo.ID 
join ns in Context.Status on st.SID equals ns.ID 
join pa in Context.Students on st.NominatedBy equals pa.Email 
where p.IsActive==true && sbu.StudentID == 123 && sbu.IsActive == true 
select new result() 
{ 
DLId = p.Id, 
    TopicId = st.Id, 
    TopicName = at.Name, 
PrimaryOrg = bo.BusinessUnit, 
StatusId = ns.ID, 
ModifiedBy = pa.LastName 
}) 
+1

StudentID <> ParticipantID –

+1

sry, c'était une faute de frappe. corrigée. – poc

+7

Vérifiez le [SQL généré] (https://msdn.microsoft.com/en-us/library/bb386961%28v=vs.110%29.aspx) – Martheen

Répondre

0
(from st in Context.STopics 
join at in Context.ATopics on st.Id equals at.Id 
join p in Context.Students on new { st.StudentId, p.IsActive } equals new { p.Id , true} 
join sbu in Context.Sorgs on new { sbu.BUorgID, sbu.IsActive,sbu.StudentID } equals new { at.BUorgID , true, 123} 
join bo in Context.BOrgs on sbu.BUOrgID equals bo.ID 
join ns in Context.Status on st.SID equals ns.ID 
join pa in Context.Students on st.NominatedBy equals pa.Email 
select new result() 
{ 
DLId = p.Id, 
TopicId = st.Id, 
TopicName = at.Name, 
PrimaryOrg = bo.BusinessUnit, 
StatusId = ns.ID, 
ModifiedBy = pa.LastName 
}) 

Pouvez-vous essayer un, si vous voulez obtenir le problème exact, vous pouvez obtenir comment sql query est généré à partir des instructions linq, linq requête utilise beaucoup de méthodologie de requête interne

var query= your linqquery; 
string sqlQuery=query.ToString(); 

you can review sqlQuery.