Silverlight + DomainService 簡易框架之二完成查詢操作

使用Silverlight + DomainService進行開發時我們可以在Silverlight項目中創建一個BLL層用於Silverlight調用如下圖所示

要完成數據查詢功能在Sliverlight項目中做了這麼幾項工作

1.定義查詢處理委託

public delegate void SelectHander<T>(IEnumerable<T> data);

2.編寫BLL代碼

我這裏寫了一個DB類用於處理DomainService對象,代碼如下

    public class DB
    {
        private static DomainService1 _db;
        public static DomainService1 db
        {
            get
            {
                if (_db == null) _db = new DomainService1();
                return _db;
            }
        }
    }

2.1普通全查功能

    public class RoleBLL
    {
        public static void FindAll(SelectHander<UserRoles> sh)
        {
            var db = DB.db;
            var m = db.Load<UserRoles>(db.GetUserRolesQuery());
            m.Completed += (a, b) =>
            {
                sh(m.Entities);                
            };
        }
    }

2.2如果要完成帶條件查詢需要在Web服務端進行處理

2.2.1 修改原來的

public  class DomainService1 : LinqToEntitiesDomainService<MyBookShopEntities>

改爲

public partial class DomainService1 : LinqToEntitiesDomainService<MyBookShopEntities>

這樣自己就可以再寫一個局部類來擴充DomainService1的代碼

    public partial class DomainService1
    {
        public IQueryable<UserRoles> GetUserRolesByName(string name)
        {
            return this.ObjectContext.UserRoles.Where(r => r.Name.StartsWith(name));
        }
    }


2.2.2這樣在Silverlight端的RoleBLL就可以調用服務端的查詢,Silverlight端代碼如下:

    public class RoleBLL
    {
        public static void FindAll(SelectHander<UserRoles> sh)
        {
            var db = DB.db;
            var m = db.Load<UserRoles>(db.GetUserRolesQuery());
            m.Completed += (a, b) =>{sh(m.Entities);};
        }
        public static void FindAllByName(string name, SelectHander<UserRoles> sh)
        {
            var db = DB.db;
            var m = db.Load<UserRoles>(db.GetUserRolesByNameQuery(name));
            m.Completed += (a, b) => { sh(m.Entities); };
        }
    }

3.Silverlight表示層端調用

        public MainPage()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            RoleBLL.FindAll(datas => { userRolesDataGrid.ItemsSource = datas; });
        }

效果:

條件查詢代碼:

        private void btnQuery_Click(object sender, RoutedEventArgs e)
        {
            RoleBLL.FindAllByName(txtName.Text, datas => { userRolesDataGrid.ItemsSource = datas; });
        }

效果:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章