View Full Version : جستجوی پیشرفته در سیورلایت
aghayex
سه شنبه 30 مهر 1392, 22:58 عصر
با سلام
من در برنامه ی سیلورلایت خودم اومدم از wcf ria و ef 5 استفاده کردم اما در سیلورلایت از DomainDataSource استفاده نکردم و خودم دستی اطلاعات رو از سرویس دهنده می گیرم . برا جستجو من در wpf می اومدم به صورت زیر عمل می کردم اما هر کاری می کنم که همین روش رو در سیلورلایت پیاده سازی کنم نمی تونم :
IQueryable<Table1> _query = _db.Table1;
if (!string.IsNullOrWhiteSpace(Currentperson.Name))
_query = _query.Where(o => System.Data.Objects.SqlClient.SqlFunctions.PatInde x(Currentperson.Name.Replace("*", "%").Replace("؟", "_").Replace("?", "_").Replace("ی", "ي").Replace("ک", "ك"), o.Name) > 0);
if (Currentperson.Tavalod != 0)
_query = _query.Where(o => o.Tavalod == CurrentMorabi.Tavalod);
if (!Equals(_query, _db.Table1))
{
var page = from o in _query orderby o.Name ascending select o;
if (page.Any())
{
Col = new ObservableCollection<Table1>(page.ToList());
RaisePropertyChanged("Col");
}
else
{
MessageBox.Show("ضابطه ی شما هیچ نتیجه ای نداشت .", "اطلاعات", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
else
{
MessageBox.Show("شما همچ ضابطه ای برای جستجو تعیین نکرده اید", "خطا", MessageBoxButton.OK, MessageBoxImage.Information);
if (ColMorabi != null)
{
Col = null;
RaisePropertyChanged("Col");
}
}
hamidhws
پنج شنبه 02 آبان 1392, 00:50 صبح
سلام
منظورتون چیه که نمیتونید؟مشکلتون دقیقا کجاست؟توی دریاقت اطلاعات از بانک یا توی جستجو
aghayex
پنج شنبه 02 آبان 1392, 10:10 صبح
نگاه کنید دوست عزیز من به وسیله ی کد بالا در wpf یه جستجوی خیلی پیشرفته درست کرده بودم اما حالا با سیلورلایت نمیشه یعنی اگه همین کد و در بخش سیلورلایت می نویسم به System.Data.Objects.SqlClient.SqlFunctions.PatInde x گیر می ده و اگه گیر اونو هم رفع کنیم چطوری می تونم چطور می تونیم کوئری رو تعیف کنیم چون طبق این کد ما در سیلورلایت که به دیتابیس دسترسی مستقیم نداریم IQueryable<Table1> _query = _db.Table1; و در آخر چطوری این کوئری رو که تعریف کردیم رو به یه متد در wcf ria بفرستیم ؟
hamidhws
پنج شنبه 02 آبان 1392, 12:47 عصر
نگاه کنید دوست عزیز من به وسیله ی کد بالا در wpf یه جستجوی خیلی پیشرفته درست کرده بودم اما حالا با سیلورلایت نمیشه یعنی اگه همین کد و در بخش سیلورلایت می نویسم به System.Data.Objects.SqlClient.SqlFunctions.PatInde x گیر می ده و اگه گیر اونو هم رفع کنیم چطوری می تونم چطور می تونیم کوئری رو تعیف کنیم چون طبق این کد ما در سیلورلایت که به دیتابیس دسترسی مستقیم نداریم IQueryable<Table1> _query = _db.Table1; و در آخر چطوری این کوئری رو که تعریف کردیم رو به یه متد در wcf ria بفرستیم ؟
سلام
شما میخواید جستجوتون رو سمت سرور انجام بدید یا سمت کلاینت؟
aghayex
پنج شنبه 02 آبان 1392, 13:43 عصر
برا من هیچ فرقی نمی کنه ؟
hamidhws
پنج شنبه 02 آبان 1392, 14:55 عصر
سلام دوست عزیز
به نظر من اگه حجم داده ها خیلی زیاد نیست سمت کلاینت اینکارو انجام بده.
ببین اگه میخوای جستجو مثلا برای نمایش توی دیتاگرید انجام بدی بهترین کاری که میشه انجام داد اینه:
سمت سرور :
1-تیبل های بانک رو با دیتاست بگیر
2-یه سرویس بساز و به دیتاستت وصل کن
سمت کلاینت :
3-از طریق wcf سمت کلاینت دیتا رو از سمت سرور بگیر بریز توی یه observecollection
4-الان دیتای تو توی observecollection هست و میتونی اونو به itemsource مثلا دیتاگرید bind کنی یا دستی بریزی توش
5-برای جستجو هم مستقیم توی observecollection جستجو میکنی و بعد مشابه مرحله 4
برای جستجو هم یه نمونه کد میزارم :
DataGrid1.ItemsSource = myobservecollection.Where(a => a.test.Contains("sample text for search")
aghayex
پنج شنبه 02 آبان 1392, 15:21 عصر
برنامه شامل سه تیبل برا اطلاعات پایه هست ( استان و ... ) سه تیبل هم داده های کاربر ذخیره میشن هر تیبل نهایتا 2000 رکورد در اون ذخیره میشه . از اون طرف تعداد یوزر کنترل هایی که با این کنترل ها کار می کنن زیاد هستن به طوری که نمیشه از روش پیشنهادی شما استفاده کرد.
روش شما به نوع روش آفلاین هست و شما یک بار داده ها رو از سرور می گیری و با اونها کار می کنی و در این حالتما نمی تونیم از امکانات ردیابی تغیرات ef هم استفاده کنیم
hamidhws
پنج شنبه 02 آبان 1392, 16:22 عصر
از اون طرف تعداد یوزر کنترل هایی که با این کنترل ها کار می کنن زیاد هست
متوجه منظورتون نمیشم.شما که قرار نیست به تعداد یوزر کنترل ها دریافت کننده داشته باشید !
روش شما به نوع روش آفلاین هست و شما یک بار داده ها رو از سرور می گیری و با اونها کار می کنی و در این حالتما نمی تونیم از امکانات ردیابی تغیرات ef هم استفاده کنیم
دوست عزیز برنامه نویسی وب با برنامه نویسی ویندوز آپلیکیشن فرق میکنه. شما توی برنامه نویسی وب باید علاوه بر به روز بودن اطلاعات ، ترافیک شبکه و مقدار حجم اطلاعات ارسالی رو هم در نظر بگیری
این روش که اشاره کردم در کنار اون چیزی که فرمودید مزیت های زیادی داره مثل پایین اوردن ترافیک شبکه،برداشتن بار پردازش از روی سرور و انتقال اون سمت کلاینت . سرعت بسیار بالای نمایش و پردازش اطلاعات و...
برای حل مشکل بروز بودن اطلاعات هم میتونید کنترلی رو قرار بدید که کاربر بتونه بصورت دستی اطلاعات رو بروز کنه. یا از wcf duplex استفاده کنید که بنده پیشنهاد نمیکنم.
بنده یه اشاره کنم فقط: ببین دوست عزیز حجم اطلاعات شما خیلی کمه و این روشی که گفتم برای حجم اطلاعات کم مفیده (برای مثال شما نمیتونی انتظار داشته باشی گوگل از این روش استفاده کنه و با هربار کل دیتابیس رو روی سیستم شما دانلود کنه!)
موفق باشید
سید علی گتمیری
سه شنبه 21 آبان 1392, 22:07 عصر
دوست گرامی
مفاهیم پایه ای برنامه نویسی روی - ویندوز(یا WPF) - وب - سیلورلایت - متفاوت هست و این سه تکنولوژی در برنامه نویسی دارای تفاوت در مفاهیم بصورت جدی می باشند. برای اسنکه خوب برنامه بنویسیم ابتدا باید این مفاهیم و تفاوت آنها را درک کنیم. با هر کدوم که می خواین برنامه بنویسیم به قول سهراب چشم ها را باید شست، جور دیگر باید دید.
با درک مفاهیم به راحتی همه مسائل قابل حله
موفق باشی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.