2014-09-24 2 views
0

나는 완벽하게 필요한 데이터를 가져 오는 다음 쿼리를 사용합니다.쿼리에서 단일 개체 선택

var subFuncName = from a in m_dcSQL_ConnectionProdTest.DC3_SubFunctions 
         where a.VersionIndex == versionIndex && stepDistinct.Select(b => b.Step).Contains(a.FunctionNumber) && stepDistinct.Select(c => c.LogID).Contains(a.SubFunctionNumber) 
         select new 
         { 
          a.FunctionNumber, 
          a.SubFunctionNumber, 
          a.SubFunctionName, 
         }; 

그런 다음 일부 데이터를 목록에 추가하려고합니다.

foreach (var item in stepDistinct) 
{ 
     lstPareto.Add(new clsPareto(Convert.ToInt32(item.Step), Convert.ToInt32(item.LogID), 
     stepLogID.Where(p => p.Step.Equals(item.Step) && p.LogID.Equals(item.LogID)).Count(), 
     subFuncName.Where(x => x.FunctionNumber.Equals(item.Step) && x.SubFunctionNumber.Equals(item.LogID)).Select(x => x.SubFunctionName).ToString())); --THIS LINE IS THE PROBLEM-- 
} 

내 clsPareto 클래스 : 내가 뭘하려고 오전

public class clsPareto 
    {  
     public int intStep { get; set; } 
     public int intLogID { get; set; } 
     public int iCount { get; set; } 
     public string strFuncName { get; set; } 

     public clsPareto(int ParetoStep, int ParetoLogID, int Count, string FuncName) 
     { 
      intStep = ParetoStep; 
      intLogID = ParetoLogID; 
      iCount = Count; 
      strFuncName = FuncName; 
     }   
    } 

는 subFuncName FunctionNumber = 단계와 SubFunctionNumber = LOGID에서 각 SubFunctionName을 당겨하는 것입니다. 그러나, 내가 그것을 내 DataGrid에 바인딩 할 때, 이름을 표시하기위한 열은 대신 SQL Query String을 표시하고 실제로 원하는 요소를 가져 가지 않습니다. 내 .Select(x => x.SubFunctionName) 트릭을 할 줄 알았는데, 분명히 그것은하지 않습니다. LINQ와 C#을 사용하는 데는 아직 꽤 익숙하지 않으므로 어떻게해야할까요?

답변

1

문제 행의 linq는 여전히 표현식입니다. Select()은 값이 아닌 IEnumerable을 반환하고 그 다음에 ToString()을 수행합니다. 이것이 바로 SQL을 다시 얻는 이유입니다.

표현식을 해결하고 실제 객체를 가져와야합니다. FuncName을 얻기 위해 Single()을 추가하면됩니다. funcname에 이미있는 경우 당신은 또한 문자열로 변환 할 필요가 있습니다 : 컬렉션에 일치하는 요소가없는 경우

subFuncName.Where(x => x.FunctionNumber.Equals(item.Step) && x.SubFunctionNumber.Equals(item.LogID)) 
    .Select(x => x.SubFunctionName).Single().ToString())); 
+0

글쎄, 그것은 광기로 단순한 하하였다. 고마워요. 럼블이 빠른 답을 얻었습니다. – St0ffer

0

이 솔루션은 예외가 발생합니다.

subFuncName.Where(x => x.FunctionNumber.Equals(item.Step) && x.SubFunctionNumber.Equals(item.LogID)) 
    .Select(x => x.SubFunctionName).Single().ToString())); 

사용할 수 있습니다.

var subFuncName = subFuncName.Where(x => x.FunctionNumber.Equals(item.Step) && x.SubFunctionNumber.Equals(item.LogID)) 
     .Select(x => x.SubFunctionName).FirstOrDefault()); 

    if(subFuncName != null) 
    // Add it 
    else 
    subFuncName == "UNDEFINED"; 

subFuncName이 null 인 경우 직접 처리하십시오.

관련 문제