2016-07-22 1 views
2

У меня есть linq to sql и я изучаю, как использовать linq для sql для группировки ваших результатов. Я вижу только образцы с подсчетом и суммой. Моя модель заключается в том, что каждый заказ клиента имеет множество заметок и может содержать несколько заметок. Сейчас он перечисляет все клиентские заказы и несколько раз, если он имеет несколько заметок.Linq to Sql Group Без учета

Как использовать группу, в Linq к Sql без сумм/подсчитывает совокупный

Я пробовал:

public IQueryable<object> getAllamcase() 
    { 
     try 
     { 
      var q = (from c in _context.Customer 
        join am in _context.table2 on c.id equals am.id 
        join ampn in _context.table3 on am.id equals ampn.id 
        join ay in _context.tabl4 on am.id equals ay.id 
        join oim in _context.table5 on am.id equals oim.id 
        group c.FileNum by new 
        { 
         FileNum = c.order, 
         assignmentdt = am.Assignment_DT, 
         oimname = oim.FullName, 
         notes = ampn.ProgressNotes, 
         years = ay.AMYear 
        }).AsQueryable(); 

      return q; 
     } 
     catch (Exception ex) 
     { 
      _logger.LogError("Could not get......", ex); 
      return null; 
     } 
    } 

Мои результаты выглядят как множественные jsons

Customer notes 
1    notes 1 
1    notes 2 
1    notes 3 
2    notes 1 
2    notes 2 

Я просто хочу, чтобы он вернулся в одном json, как

Customer notes 
1    notes 1 
       notes 2 
       notes 3 

2    notes 1 
       notes 2 
+0

Непонятно, что вы пытаетесь сделать. Если вам не нужно свойство '.Count', не используйте его. Уточните, какой результат вы получаете и чего хотите. –

+0

@JamesCurran, я обновил мои желаемые результаты. – epv

+1

Вы еще не обнаружили навигационных свойств. Такие вещи, как 'Customer.Orders',' Order.Notes'. Они дают вам то, что вы хотите прямо сейчас. Кстати, я надеюсь, что это не ваши настоящие имена таблиц. –

ответ

1

Ваш вопрос непонятен, но, как я сказал @GertArnold, если вы хотите загружать ноты клиентов, вы должны использовать Свойства навигации. Кроме того, посмотрите на naming conventions. Ваш код будет намного чище, если вы правильно назовете переменные и т. Д. Но согласно вашему заголовку вопроса, я могу предложить вам следующее. Представьте себе, что у вас есть Примечание класс:

public class Note 
{ 
    public int CustomerId { get; set; } 
    public string NoteName { get; set; } 
} 

И у вас есть список заметок следующим образом:

List<Note> notes = new List<Note> 
{ 
    new Note { CustomerId = 1, NoteName = "note 1" }, 
    new Note { CustomerId = 1, NoteName = "note 2" }, 
    new Note { CustomerId = 1, NoteName = "note 3" }, 
    new Note { CustomerId = 1, NoteName = "note 4" }, 
    new Note { CustomerId = 2, NoteName = "note 1" }, 
    new Note { CustomerId = 2, NoteName = "note 2" }, 
    new Note { CustomerId = 3, NoteName = "note 1" }, 
}; 

Если вы хотите получить CustomerId-s и соответствующие примечания из этого списка вы можете easyli достичь она группируя их:

var result = notes 
    .GroupBy(m => m.CustomerId) 
    .Select(g => new 
    { 
     CustomerId = g.Key, 
     Notes = g.Select(m => m.NoteName).ToList() 
    }); 

результат будет:

CustomerId || NoteName 
1    note 1 
       note 2 
       note 3 
       note 4 
2    note 1 
       note 2 
3    note 1 

Надеюсь, это поможет вам.