2016-06-09 2 views
2

Я пытаюсь получить данные из одной таблицы первого я создаю SQL запрос, а затем я пытаюсь преобразовать этот SQL в Linq запросSQL для запросов LINQ

public static string GetVo() 
    { 
     try 
     { 
      TrackDataEntities1 DB = new TrackDataEntities1(); 
      var a = DB.tblVeh; 
      string data = "["; 
      foreach (var p in a) 
      { 
       data += "data:["; 
       var re = (from vehvoila in DB.tblVeh 
          where vehvoila.MID.Equals("23065") && !(vehvoila.Name == "") 
          group vehvoila by new { vehvoila.Name } into g 
          select new 
          { 
           g.Key.Name, 
           cnt = g.Select(t => t.Name).Count() 
          }) ; 


       data = data.Remove(data.Length - 1); 
       data += "],"; 
      } 

      data = data.Remove(data.Length - 1); 

      data += "]"; 
      return data; 
     } 

     catch (Exception exception) 
     { 
      throw new Exception(); 

     } 

    } 

SQL запрос

Select Name, count(*) from tblVeh 
WHERE MID = 23065 and Name <> '' Group By Name 

данные

VName (No column name) 
d1  2 
s2  1 
f3  2 

Теперь, когда я отладки data показывает

'[data:],data:],data:],data:],data:],data:],data:],data:],data:],data:],data:],data:],data:],data:],data:],data' 

Но я хочу, данные как этот

'[' d1' , 2], [ 's2', 1], [ 'f3', 2]

ответ

2

Вот то, что вы ищете :

public static string GetVo() 
    { 
     try 
     { 
      TrackDataEntities1 DB = new TrackDataEntities1(); 
      var result = DB.tblVeh.Where(x => x.MID == 23065 && x.Name != "") 
        .GroupBy(x => x.Name) 
        .Select(x => "['" + x.Key + "," + x.Count(y => y.Name != "") + "']") 
        .ToList(); 
      return String.Join(",", result); 
     } 

     catch (Exception exception) 
     { 
      throw new Exception(); 

     } 
    } 
+0

Я копирую это в петлю foreach? –

+0

@ user6408005 нет, вам не нужен цикл foreach вообще –

+0

@ user6408005 'result' должен содержать ваш список –

0

Первое, что должно сделать вас подозрительным код является то, что переменная цикла, p, нигде не используется. Это достаточно указывает на то, что что-то совершенно неверно. Но также, вы даже не используете re в любом месте. Разве Visual Studio ничего не делает, чтобы указать на эти недостатки? (Я так привык к Resharper, что не знаю, что VS делает без него).

Вторая вещь, которая поднимает брови, заключается в том, что вы переплете несколько обязанностей в один клубок кода. Получение данных, группировка, построение строки. Постарайтесь мыслить в разных шагах.

Давайте сосредоточимся на разделении проблем формирования и форматирования данных. Во-первых, вам нужны сгруппированные данные (= формирование данных). Так сделать первый:

var groupedVehs = from vehvoila in DB.tblVeh 
        where vehvoila.MID == "23065" 
        && vehvoila.Name != "" 
        group vehvoila by vehvoila.Name into g 
        select new 
        { 
         Name = g.Key, 
         Count = g.Count() 
        }); 

Затем сконцентрируйтесь на форматирование, например:

var stringOutput = string.Join(",", 
         groupedVehs.Select(x => string.Format("['{0}',{1}]", x.Name, x.Count))); 

Делая это, это гораздо проще изменить форматирование позже, или использовать совершенно разные данные с такой же формат.

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