亚音速3 LINQ的投影问题(Subsonic 3 Linq Projection Issue)

2019-07-29 23:26发布

好的,我敲我的头靠在这一个墙;-)

在我的数据库中调用地址,客户和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; }
}

现在,出于某种原因,这是不行的,我得到CustomerSummaryView结果的IEnumerable列表,每个记录有一个客户名称和邮政编码,但客户类型字段始终为空。

我已经重新创建这个问题多次与不同的数据库表,和预计的类。

任何人任何想法?

Answer 1:

我不能瑞普这个问题 - 这是一个测试我只是想:

[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));
    }

}

这完全过去了。 我想知道,如果你在那里使用的保留字?



Answer 2:

这篇文章似乎是指一个类似的问题...

http://groups.google.com/group/subsonicproject/browse_thread/thread/2b569539b7f67a34?hl=en&pli=1



Answer 3:

是的,罗布的示例工作的原因是因为他的投射的属性名称完全匹配,而约翰的原来的例子有CustomerType和type.Description之间的差异。

这不应该是一个问题,但它是 - 投影映射在寻找同名的性质,并没有映射的值,如果它没有找到一个匹配。 因此,如果没有一个确切的名称匹配您的投影对象的属性将是其类型的默认值。

好消息是,今日笔者得到最新的源和建立了一个新的Subsonic.Core.dll现在的行为是固定的。

因此,预期上述约翰的代码应工作。



Answer 4:

我刚刚从2010年3月21日下载最新版本,这是在此线程最后海报后约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属性与ID结束了,和Value属性与Name结束。 很奇怪。



文章来源: Subsonic 3 Linq Projection Issue