如何将存储过程的结果返回到视图模型

时间:2016-09-06 20:56:50

标签: c# wpf mvvm

这是我的第一个问题,我是WPF / MVVM的新手。

我要做的是显示一个包含存储过程返回结果的多列列表视图。

我正在尽力实现MVVM,这就是我遇到麻烦的地方。

我有一个模型(SL_ID是PK,在数据库中不可为空):

public class mJob_Select_OrderList
{
        public int SL_ID { get; set; }
        public string E32JobNumber { get; set; }
        public string E32_CLIENT { get; set; }
        public string SL_DESCRIPTION { get; set; }
        public string E32_DESCRIPTION { get; set; }
}

然后我有一个视图模型:

public class vmJob_Select : vmMain
{
        #region Members
        Models.mJob_Select _mJobSelectSettings;
        public SLEVEN_CLASS.dbSLEVENDataContext _dc;
        #endregion

        #region Constructors
        public vmJob_Select()
        {
            _dc = new SLEVEN_CLASS.dbSLEVENDataContext();

            _mJobSelectSettings = new Models.mJob_Select { EnvironmentID = 1 };

            //EnvironmentList
            var dsEnvironmentList = (from el in _dc.vw_EnvironmentLists orderby el.ENV_ID select new mJob_Select_Environment { ENV_ID = el.ENV_ID, Environment = el.Environment, IMAGE_RESOURCE = el.IMAGE_RESOURCE });
            EnvironmentList = new ObservableCollection<mJob_Select_Environment>(dsEnvironmentList);

            //Orders List
            var dsSLEVENOrders = _dc.get_SLORDER_List(SelectedEnvironmentID).ToList();
            SelectOrderList = new List<mJob_Select_OrderList>(dsSLEVENOrders);
        }
        #endregion

        #region Properties
        public Models.mJob_Select mJobSelectSettings { get { return _mJobSelectSettings; } set { _mJobSelectSettings = value; } }

        public int SelectedEnvironmentID { get { return mJobSelectSettings.EnvironmentID; } set { if (mJobSelectSettings.EnvironmentID != value) { mJobSelectSettings.EnvironmentID = value; RaisePropertyChanged("EnvironmentID"); } } }

        public ObservableCollection<mJob_Select_Environment> EnvironmentList { get; set; }

        public List<mJob_Select_OrderList> SelectOrderList { get; set; }
}

所以基本上从数据库中的视图中提取EnvironmentList,我可以成功填充ObservableCollectionSelectedOrderList是存储过程的结果,我正在尝试将此结果加载到某种列表对象中。

我得到的错误是

  

无法从'System.Collections.Generic.List'转换为'int'

我能够在视图后面的代码中成功实现它,但我正在努力坚持MVVM并使我的ViewModel能够正常工作。

using (SLEVEN_CLASS.dbSLEVENDataContext dbSLEVEN = new SLEVEN_CLASS.dbSLEVENDataContext())
{
    var dsSLEVENOrders = dbSLEVEN.get_SLORDER_List(intENVID);
    lvSlevenJobs.ItemsSource = dsSLEVENOrders;
    lvSlevenJobs.SelectedValuePath = "SL_ID";
}

我一直在寻找并尝试解决这个问题一段时间了,我试图实现一些我在这里找到的解决方案,但无济于事。一个涉及循环IResult并将每一行添加到模型另一个建议构建更复杂的linq查询而不是存储过程。这些选项都不是不可能的。是否有普遍接受的方法来执行此任务?

提前感谢您提供的任何答案/建议!

// // EDIT 我相信我找到了解决方案。我试图将我的SPROC结果返回到我创建的模型,但是当使用LINQ时,会自动创建一个名为Procedure Name +'Result'的模型。

我声明我的列表使用'Result'模型如下:

public List<get_SLORDER_ListResult> SelectOrderList { get; set; }
List<get_SLORDER_ListResult> lstSLEVENOrders = _dc.get_SLORDER_List(SelectedEnvironmentID).ToList<get_SLORDER_ListResult>();
            SelectOrderList = new List<get_SLORDER_ListResult>(lstSLEVENOrders);

然后我将ListView绑定到SelectOrderList。

0 个答案:

没有答案