c# - 如何从数据库中的两个表中填充 ObservableCollection?
问题描述
尝试使用实体框架从数据库中填充 ObservableCollection。在我开始使用链接表之前,一切都很好。
我创建了 DeviceCategory 和 DeviceComplexity 模型,现在在 WyeModel 中我尝试将它们集成到 DeviceCategoryViewModel 中。此外,在 DeviceCategoryViewModel 中,我指出了从数据库中获取信息的请求,但我遇到了问题。如何用这些信息填写 ObservableCollection?我尝试了不同的方法,但并没有导致任何结果,我只是变得更加困惑。
设备类别视图模型
class DeviceCategoryViewModel
{
TechDContext dc = new TechDContext();
public int Device_category_id { get; set; }
public string Device_category_name { get; set; }
public int Device_complexity_id { get; set; }
public string Device_complexity_name { get; set; }
public static DeviceCategoryViewModel DeviceCaterogyVM(DeviceCategory deviceCategory, DeviceComplexity deviceComplexity)
{
return new DeviceCategoryViewModel
{
Device_category_id = deviceCategory.Device_category_id,
Device_category_name = deviceCategory.Category_name,
Device_complexity_id = deviceCategory.Device_complexity_id,
Device_complexity_name = deviceComplexity.Device_complexity_name
};
}
public void FillDeviceDategories()
{
var q = from cat in dc.DeviceCategories
join com in dc.DeviceComplexities on cat.Device_complexity_id equals com.Device_complexity_id
select new
{
Device_category_id = cat.Device_category_id,
Category_name = cat.Category_name,
Device_complexity_id = com.Device_complexity_id,
Device_complexity_name = com.Device_complexity_name
};
items = q;
deviceCategories = Convert(items);
}
public ObservableCollection<DeviceCategoryViewModel>
Convert(IEnumerable<object> original)
{
return new ObservableCollection<DeviceCategoryViewModel>(original.Cast<DeviceCategoryViewModel>());
}
private IEnumerable<object> items;
public IEnumerable<object> Items
{
get
{
return items;
}
}
private ObservableCollection<DeviceCategoryViewModel> deviceCategories;
public ObservableCollection<DeviceCategoryViewModel> DeviceCategories
{
get
{
FillDeviceDategories();
return deviceCategories;
}
}
设备类别模型
[Table("device_categories")]
public class DeviceCategory
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Device_category_id { get; set; }
public string Category_name { get; set; }
//[ForeignKey]
public int Device_complexity_id { get; set; }
public DeviceCategory()
{
}
public DeviceCategory(string name, int complexity_id)
{
Category_name = name;
Device_complexity_id = complexity_id;
}
}
设备复杂性模型
[Table("device_complexities")]
public class DeviceComplexity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Device_complexity_id { get; set; }
public string Device_complexity_name { get; set; }
public DeviceComplexity()
{
}
public DeviceComplexity(string name)
{
Device_complexity_name = name;
}
}
我现在在转换方法中遇到错误
解决方案
您会尝试将 LINQ 查询结果转换ObservableCollection<DeviceCategoryViewModel>
为单独的Convert
函数。
为什么不直接将您的 LINQ 查询结果收集到ObservableCollection<DeviceCategoryViewModel>
就这样使用
var q = from cat in dc.DeviceCategories
join com in dc.DeviceComplexities on cat.Device_complexity_id equals com.Device_complexity_id
select new DeviceCategoryViewModel // <= Note This Line
{
Device_category_id = cat.Device_category_id,
Category_name = cat.Category_name,
Device_complexity_id = com.Device_complexity_id,
Device_complexity_name = com.Device_complexity_name
};
deviceCategories = new ObservableCollection<DeviceCategoryViewModel>(q);
或者,如果您想在列表之后获得结果,则只需使用q.ToList()
deviceCategories = new ObservableCollection<DeviceCategoryViewModel>(q.ToList());
推荐阅读
- flutter - DriverError:由于远程错误颤动,未能完成 Tap
- python - 如何删除 CSV 中的所有标点符号、特殊字符并用“数字”字符串替换数字?
- web-component - 向开槽元素添加类(?)
- python - 如何提取点击值
- java - 如何使用 RestTemplate 和 JUnit 测试 restclient?
- javascript - 如何使用 jquery 将超链接设置为按钮的父级?
- .net-core - Cosmos DB .Net Core - 读取文档 - 不支持的 ParitionKey 值
- visual-studio-code - 删除 VS Code Editor 视图中心的垂直线
- karate - 获取 JSON 密钥作为文本
- sql - 选择 SQL (Redshift) 分组中的第一行数值