2014-09-24 4 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; 
     }   
    } 

То, что я пытаюсь сделать, это вытащить каждый SubFunctionName из subFuncName где FunctionNumber = Шаг и SubFunctionNumber = LOGID. Однако, когда я привязываю его к моему datagrid, столбец, предназначенный для отображения имен, просто показывает строку SQL Query String и фактически не принимает элементы, которые я хочу. Я думал, что мой .Select(x => x.SubFunctionName) будет делать трюк, но, видимо, этого не происходит. Все еще довольно новичок в использовании LINQ и C#, так как я могу это сделать?

ответ

1

Линукс для проблемной строки по-прежнему является выражением - Select() возвращает IEnumerable не значение - и затем вы делаете ToString() на нем. Вот почему вы просто возвращаете SQL.

Вам нужно решить выражение и получить из него фактический объект. Добавление Single() для получения FuncName должно сделать это. Вы также можете не нужно преобразовать в строку, если имя_функции уже есть:

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

Ну, это было безумно просто ха-ха. Большое спасибо Rhumborl за ваш быстрый ответ, он работает так, как надо! – 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 является нулевым.

Смежные вопросы