1

我正在创建一个饼图,并且正在从数据库中检索其名称-值对。

在此处输入图像描述

如何读取行详细信息以获取值并将其存储为一个属性?

public override void OnApplyTemplate()
    {

        Ram.DataContext = new List<UsageRAM>() 
          { new UsageRAM() { name = "Available" , value =/*how to get the value here*/ },
            new UsageRAM() { name = "Used" , value =/*how to get the value here*/ }};
        base.OnApplyTemplate();
    }

 public class UsageRAM
    {
        public string name { get; set; }
        public double value { get; set; }
    }

编辑

--对我有用的答案--

        using (DB db = new DB())
        {
            var row = (from c in db.UsageRAMs
                       orderby c.UsageRamID descending
                       select c).First();

            Ram.DataContext = new List<UsageRAM>() 
              { new UsageRAM() { name = "Available" , value = row.Available},
               new UsageRAM() { name = "Used"  , value = row.Used }};
4

1 回答 1

2

如果您使用的是 EF,只需将新模型添加到您的项目并在此模型中包含所需的表。然后您可以使用新创建的实体对象来读取您的数据库值,如下所示:

var Rows = context.YourTableName.Where(YourCondition).ToArray();

然后,您可以使用 foreach 或其他方法遍历 Rows 集合。

如果您需要从单行读取值,您可能需要使用First而不是Where上面的。这将返回一个对象,其属性将映射到您的数据库字段,并且可以直接在您在问题中发布的示例代码中分配。

例子

假设您的模型的实体类名为 MyEntities,它包含表 UsageRam,该表有两个字段 Available 和 Used。然后它将采用以下代码:

using(MyEntities e = new MyEntities)
{
    var Row = e.MyTable.First(x => x.UsageRamID = **[ID]**);

    MessageBox.Show("Available=" + Row.Available.ToString() + ",Used=" + Row.Used.ToString();
}

我刚刚在消息框中显示了值,您可以将它们分配给您想要的任何东西。

另一个例子

using(MyEntities e = new MyEntities)
{
    var Rows = e.MyTable.Where(x => x.UsageRamID > 10 &&  x.UsageRamID < 20);

    foreach(var Row in Rows)
        MessageBox.Show("Available=" + Row.Available.ToString() + ",Used=" + Row.Used.ToString();
}

例 3

您更新后的帖子中的代码对我来说似乎很好,尽管我确实对数据库设计有一些疑问,但鉴于您的表在 RamUsageID 列上被索引,这应该会给您正确的结果,而不会对性能产生太大影响。我通常更喜欢 lambda 表达式而不是查询,所以我宁愿这样写:

db.RamUsage.OrderByDescending(x => x.RamUsageID).First()
于 2013-03-19T09:20:35.187 回答