Как заполнить ObservableCollection из двух таблиц из базы данных? - PullRequest
0 голосов
/ 15 февраля 2019

Попытка заполнить ObservableCollection из базы данных, используя Entity Framework.Все было хорошо, пока я не начал работать со связанными таблицами.

Я создал модель DeviceCategory и DeviceComplexity, и теперь в WyeModel я пытаюсь интегрировать их в DeviceCategoryViewModel.Кроме того, в DeviceCategoryViewModel я указал запрос на получение информации из базы данных, но столкнулся с проблемой.Как заполнить ObservableCollection этой информацией?Я пробовал разные способы, но это ни к чему не привело, я просто запутался.

DeviceCategoriesViewModel

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

DeviceCategory Model

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

DeviceCompexity Model

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

Теперь я получаю сообщение об ошибке в методе преобразования

1 Ответ

0 голосов
/ 15 февраля 2019

Вы бы попытались преобразовать свой результат запроса 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());
...