Subsonic 3 и Linq Group с графом - PullRequest
       10

Subsonic 3 и Linq Group с графом

1 голос
/ 27 августа 2009

У меня есть следующие две таблицы:

Customer
{
int Id
int Name
}

Bills
{
int Id
int CustomerId
decimal Amount
bool IsDue
}

Теперь я пытаюсь получить список, где у меня есть:

  1. Запись для каждого клиента с количеством связанных счетов.
  2. Запись для каждого клиента с количеством связанных счетов, для которого IsDue имеет значение true.

Я попытался сделать первый так:

var results = from c in _db.Customers
              join b in _db.Bills on c.Id equals b.CustomerId into j1
              from j2 in j1
              group j2 by c.Id into grouped
              select new
                  {
                      CustomerId = grouped.Key, 
                      NoOfBills = grouped.Count()
                  };

Это выдает ошибку: Выражение типа 'System.Collections.Generic.IEnumerable 1[OutstandingMonitor.MonitorData.Customer]' cannot be used for parameter of type 'System.Linq.IQueryable 1 [OutstandingMonitor.MonitorData.Customer]' ...

Пожалуйста, помогите мне решить эту проблему.

Далее, можно ли объединить оба запроса?

PS: использование Subsonic 3.0.0.3 с ActiveRecord

Ответы [ 2 ]

1 голос
/ 28 августа 2009

Я нашел не очень эффективное решение (если оно действительно действительно, я буду рад узнать ...: P). Вот оно:

var results = from d in _db.Bills
          group d by d.CustomerId into g
          select new
          {
              CustomerId = g.Key,
              NoOfBills = g.Count()
          };

var results2 = from c in _db.Customers
           join r in results on c.Id equals r.CustomerId
           select new
           {
               CustomerId = r.CustomerId,
               CustomerName = c.Name,
               City = c.City,
               NoOfBills = r.NoOfBills
           };

Пока работает нормально.

0 голосов
/ 27 августа 2009

Где бы вы ни использовали значение для «количества связанных счетов клиента», вы не можете просто сделать это в LINQ (однако это будет работать, только если у вас установлены соответствующие отношения в DBML):

var customers = _db.Customers; // Not necessary, but here for clarity

// ... more code

// Access the number of bills for each customer:

foreach (var customer in customers)
{
    int totalBills = customers.Bills.Count();
    int totalDueBills customers.Bills.Where(b => b.IsDue).Count();
}
...