Subsonic 3 Linq Проекция Проблема

Хорошо, я бью головой об стену с этим ;-)

Учитывая таблицы в моей базе данных, которые называются Address, Customer и CustomerType, я хочу отобразить сводную сводную информацию о клиенте, поэтому я создаю запрос для объединения этих двух таблиц и получения указанного результата.

 var customers = (from c in tblCustomer.All()
                        join address in tblAddress.All() on c.Address equals address.AddressId
                        join type in tblCustomerType.All() on c.CustomerType equals type.CustomerTypeId
                        select new CustomerSummaryView
                                   {
                                       CustomerName = c.CustomerName,
                                       CustomerType = type.Description,
                                       Postcode = address.Postcode
                                   });

  return View(customers);

CustomerSummaryView - это простое POCO

public class CustomerSummaryView
{
    public string Postcode { get; set; }
    public string CustomerType { get; set; }
    public string CustomerName { get; set; }
}

Теперь по какой-то причине это не работает, я получаю список IEnumerable результатов CustomerSummaryView, каждая запись имеет имя клиента и почтовый индекс, но поле типа клиента всегда равно нулю.

Я воссоздал эту проблему несколько раз с разными таблицами базы данных и проецируемыми классами.

У кого-нибудь есть идеи?

Ответы на вопрос(4)

причина того, что пример Роба работает, заключается в том, что имена его проекций точно совпадают, тогда как в оригинальном примере Джона есть различие между CustomerType и type.Description.

Это не должно было быть проблемой, но это было так - Projection Mapper искал свойства с тем же именем и не отображал значение, если не нашел соответствия. Следовательно, ваши проекционные объекты & apos; Свойства были бы значениями по умолчанию для его типа, если не было точного совпадения имени.

Хорошей новостью является то, что я получил последний источник сегодня и создал новый Subsonic.Core.dll, и теперь поведение исправлено.

Таким образом, приведенный выше код Джона должен работать как положено.

то есть примерно через 2 месяца после последнего постера в этой теме, и проблема все еще существует в упакованном двоичном файле. Облом.

Вот что я должен сделать:

        var data =
            (from m in Metric.All()
             where m.ParentMetricId == parentId
             select new
                    {
                         m.MetricName,
                         m.MetricId,
                    })
                    .ToList();

        var treeData =
            from d in data
            select new TreeViewItem
                    {
                        Text = d.MetricName,
                        Value = d.MetricId.ToString(),
                        LoadOnDemand = true,
                        Enabled = true,
                    };

        return new JsonResult { Data = treeData };

Если я попытаюсь сделать проекцию непосредственно из дозвукового запроса,Text свойство заканчивается идентификатором, аValue свойство заканчивается именем. Очень странно.

который я только что попробовал:

[Fact]
public void Joined_Projection_Should_Return_All_Values() {
    var qry = (from c in _db.Customers
                     join order in _db.Orders on c.CustomerID equals order.CustomerID
                     join details in _db.OrderDetails on order.OrderID equals details.OrderID
                     join products in _db.Products on details.ProductID equals products.ProductID
                     select new CustomerSummaryView
                     {
                         CustomerID = c.CustomerID,
                         OrderID = order.OrderID,
                         ProductName = products.ProductName
                     });

    Assert.True(qry.Count() > 0);

    foreach (var view in qry) {
        Assert.False(String.IsNullOrEmpty(view.ProductName));
        Assert.True(view.OrderID > 0);
        Assert.False(String.IsNullOrEmpty(view.CustomerID));
    }

}

Это прошло отлично. Мне интересно, если вы там используете зарезервированное слово?

 15 нояб. 2009 г., 18:44
Привет, Роб, я думаю, что твой тест пройден, потому что твои отображения точные. Джон делает CustomerType = type.Description, и это единственное свойство, с которым у него возникают проблемы. Я столкнулся с чем-то очень похожимstackoverflow.com/questions/1734146/…

Ваш ответ на вопрос