好吧,我正用这个撞墙撞墙; - )
在我的数据库中给出名为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结果列表,每个记录都有一个客户名称和一个邮政编码,但客户类型字段始终为空。
我使用不同的数据库表和投影类多次重新创建此问题。
任何想法?
答案 0 :(得分:2)
我不能重复这个问题 - 这是我刚试过的一个测试:
[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));
}
}
这完美地传递了。我想知道你是否在那里使用保留字?
答案 1 :(得分:0)
这篇文章似乎指的是一个类似的问题......
http://groups.google.com/group/subsonicproject/browse_thread/thread/2b569539b7f67a34?hl=en&pli=1
答案 2 :(得分:0)
是的,Rob的例子有效的原因是因为他的投影的属性名称完全匹配,而John的原始示例在CustomerType和type.Description之间存在差异。
这不应该是一个问题,但它是 - Projection Mapper正在寻找同名的属性,如果找不到匹配则没有映射值。因此,如果没有确切的名称匹配,则投影对象的属性将是其类型的默认值。
好消息是,我今天获得了最新的源代码,并构建了一个新的Subsonic.Core.dll,现在该行为已得到修复。
所以John的代码应该按预期工作。
答案 3 :(得分:0)
我刚刚从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 };
如果我尝试直接从Subsonic查询进行投影,文字属性最终会显示ID,值属性最终会显示名称。很奇怪。