2013-11-28 2 views
0

이것은 초기 쿼리입니다.linq 또는 lambda 쿼리에서 조건이 발생하는 곳

var DevUsers = db.UserProfiles.Include("Tasks").Include("Projects").Include("FollowerTasks").Select(i => new 
     {    
      Tasks = db.Tasks.Where(j => j.AssignedToPersonID == i.PersonID).Where(k => k.QAStatus != "Passed").Select(k => new 
      { 
       k.Projects, 
       k.TaskName, 
       k.ViewedByDeveloper, 
       k.Status, 
       k.QAStatus, 
       k.ReleaseStatus, 
       k.TaskID, 
       k.DisplayTaskID, 
       k.EstimatedDeliveryDate, 
       k.AssignedToPerson.FirstName, 
       Tags = k.Tags.Where(p => p.TagType == "General"), 
       Modules = k.Tags.Where(p => p.TagType == "Module"), 
       CodeTables = db.CodeTables.Where(l => l.Status == k.Status).FirstOrDefault(), 
      }).OrderBy(k => k.ViewedByDeveloper).ThenBy(k => k.CodeTables.DisplayOrder).ThenByDescending(k => k.ReleaseStatus), 
      i.PersonID, 
      i.FirstName, 
      i.LastName, 
      i.UserID, 
      i.EmailAddress, 
     }).OrderBy(i => i.FirstName); 

나는이 DevUsers

DevUsers = DevUsers.Where(m=>m.PersonID==1); 

에서 쿼리의 모든 유형을 할 수 없어 내가 어디 조건을 적용 할 수있는 방법 "변환 할 수 없습니다 소스 ..."

오류가 있습니다. PersonID(int)Status(int)에 대해 조건부에서 신청해야합니다.

+0

"PersonID"는 어떤 유형입니까? – bvj

+0

정수형 – Ruchan

+1

'OrderBy'는'IOrderedEnumerable','Where' -'IEnumerable'을 반환합니다. – Grundy

답변

3

당신의 DevUsersIOrderedEnumerable<T>이며 암시 적으로 IEnumerable<T>로 변환 할 수 없습니다, 그래서 당신은이 같은 새로운 변수를 정의해야합니다 :

var newDevUsers = DevUsers.Where(m=>m.PersonID==1); 

또는 같은 AsEnumerable()를 사용하여 마지막으로 쿼리를 수정 :

//... 
}).OrderBy(i => i.FirstName).AsEnumerable(); 
DevUsers = DevUsers.Where(m=>m.PersonID==1); 
+0

감사합니다. 하지만 여전히 상태를 검색 할 수는 없습니다. 'DevUsers = DevUsers.Where (m => m.Tasks.Status == 1); 'Status'는 식별되지 않습니다. – Ruchan

+0

@remrowruchan 당신은 무엇을 의미합니까? 그 질문에 묘사 된 문제가 아니라는 점에 대해 더 자세히 이야기해야합니다. –

+0

필자는'PersonID' (당신이 말한 것처럼 효과가있었습니다)와'Status'에 대한 조건이 필요합니다. – Ruchan

1

두 번째 질문에 대한 답변 (킹 킹 대답에 대한 의견에 게시 됨) : m.Tasks는 (IOrderedEnumerable<T>이 경우) 모음이며을 가지고 있지 않습니다.속성.

모든 작업에 상태가 나타나게하려면 DevUsers = DevUsers.Where(m => m.Tasks.All(t => t.Status==1))을 사용해야합니다.
작업에 상태를 부여하려면 DevUsers = DevUsers.Where(m => m.Tasks.Any(t => t.Status==1))을 사용해야합니다.