我的程序包含两个不同的类。我想合并两者的值,只是为了在ListBox
中显示结果信息。信息存储在数据库中,我的代码中的类是由LINQ to SQL DataClass
创建的。
头等(ReactorParameters)
该类包含有关特定时间反应堆的信息,如火焰温度,油量,空气量......
班级定义:
public class ReactorParameters
{
public TimeSpan Time
{ get; set; }
public double Temperature
{ get; set; }
public double Oil
{ get; set; }
public double Air
{ get; set; }
}
示例数据:
第二课(ProductInformation)
ProductInformation
类存储有关反应堆在哪个时间段生产的产品的信息。
班级定义:
public class ProductInformation
{
public TimeSpan Time_From
{ get; set; }
public TimeSpan Time_To
{ get; set; }
public Product Product
{ get; set; }
}
示例数据:
我希望结果如何?
我想要实现的是将反应器参数与在给定时间生产的产品结合起来。
这是一项简单的任务。你为什么要问?
当然,我可以创建一个新类,为每个ReactorParameters
创建一个实例,并在其中存储相关的Product
。但由于这只是出于用户界面的目的(我不需要额外的课程),我不确定是否有更好的方法来实现目标。我听说过CompositeCollection
和CollectionView
,但我不确定这对我有用。
那么,有没有其他方法可以填充我的ListBox
?
答案 0 :(得分:1)
在我看来,我应该去一个包含这些类作为属性的新类。这种方式允许您在需要更多属性的情况下进行扩展。
public class ProductReactorModel
{
public ReactorParameters ReactorParameters {get;set;}
public ProductInformation ProductInformation {get;set;}
}
然后创建新创建的类List<ProductReactorModel>
的列表。将此列表绑定到ListBox。使用此类,您可以访问要在ListBox中显示的类和属性。在ListBox中以下列方式绑定。
{Binding ReactorParameters.Time}
答案 1 :(得分:1)
您必须创建视图类来绑定它。
尝试以下代码(我将Product
替换为string
进行测试):
public class ReactorParameters
{
public TimeSpan Time { get; set; }
public double Temperature { get; set; }
public double Oil { get; set; }
public double Air { get; set; }
}
public class ProductInformation
{
public TimeSpan Time_From { get; set; }
public TimeSpan Time_To { get; set; }
public string Product { get; set; }
}
public class ReactorView
{
public ReactorParameters Parameters { get; set; }
public ProductInformation Product { get; set; }
}
/// <summary>
/// entry point
/// </summary>
public void Test()
{
Random rnd = new Random(1000);
// random parameters
List<ReactorParameters> parameters = (from i in Enumerable.Range(0, 24)
select new ReactorParameters
{
Time = TimeSpan.FromHours(i),
Temperature = rnd.NextDouble() * 50.0,
Oil = rnd.NextDouble() * 20.0,
Air = rnd.NextDouble() * 30.0,
}).ToList();
// product information
List<ProductInformation> products = (from i in Enumerable.Range(0, 4)
select new ProductInformation
{
Time_From = TimeSpan.FromHours(i * 6),
Time_To = TimeSpan.FromHours(i * 6 + 6),
Product = "Product " + (char)('A' + i),
}).ToList();
// combine
var result = parameters.SelectMany(param => from product in products
where param.Time >= product.Time_From && param.Time <= product.Time_To
select new ReactorView
{
Parameters = param,
Product = product
});
// alternative query
var resultAlt = from param in parameters
from product in products
where param.Time >= product.Time_From && param.Time <= product.Time_To
select new ReactorView
{
Parameters = param,
Product = product
};
// print result
foreach (var item in result)
{
Console.WriteLine("{0,-5} {1,-8:0.00} {2,-8:0.00} {3,-8:0.00} {4,-10}",
item.Parameters.Time, item.Parameters.Temperature, item.Parameters.Air, item.Parameters.Oil, item.Product.Product);
}
}