PDA

View Full Version : بررسی مقدار پارمتر null در Where در LINQ



Helpco
پنج شنبه 22 تیر 1396, 08:36 صبح
سلام شرمنده دوست مخواستم ببینم چطوری در LINQ وقتی که یک ور مینویسم مثل مثل زیر اگه شرط دوم مقداری انتخاب نشد کوئری ما همه رکورد هار نشون بده
var tt = RepositoryService._repository.FindAll<detailMelkFo rModels>().Where(x => x.MelkFor.Archive == 1 && x.MelkFor.MelkType == TypeProperty.Text && x.MelkFor.State == SelectState.Text

).Select(x => new
{
_OwnerID = x.Customer.Id,
x.Customer.name,
x.Customer.mobile,
x.Customer.mobilem,
x.Customer.phone,
}

در این کد ممکن SelectState.Text نال باشه پس باید همه استان هار را نشون بده
البته روش کد اتصال به دیتا بیس NHibernate می باشد

Mahmoud.Afrad
پنج شنبه 22 تیر 1396, 20:33 عصر
هر دو حالت null یا غیر اونو چک کنید و در شرط بیارید(ابتدا باید null و خالی بودن چک بشه)

//...
.Where(x => x.MelkFor.Archive == 1 && x.MelkFor.MelkType == TypeProperty.Text
&& (string.IsNullOrEmpty(SelectState.Text) || x.MelkFor.State == SelectState.Text) )
//...

Helpco
جمعه 23 تیر 1396, 07:41 صبح
ممنون که جواب دادید کد فوق یک مشکل حل کرد و جواب داد
در همین شرط اگه بخوایم هم نال بودن برسی بشه که همرو بیار هم کلمه نامشخص که باز همون عملکرد نال باشه چه تغیری نیاز ؟
و اگره فرار باشه چند استان انتخاب کنیم که معلوم نیست تعداد انتخاب شرط به چه صورت نوشته میشه

Mahmoud.Afrad
جمعه 23 تیر 1396, 08:24 صبح
ممنون که جواب دادید کد فوق یک مشکل حل کرد و جواب داد
در همین شرط اگه بخوایم هم نال بودن برسی بشه که همرو بیار هم کلمه نامشخص که باز همون عملکرد نال باشه چه تغیری نیاز ؟
و اگره فرار باشه چند استان انتخاب کنیم که معلوم نیست تعداد انتخاب شرط به چه صورت نوشته میشه

منظورتون از سوال اول، یعنی عبارت "نامشخص" اگر انتخاب شد ، همه رو لود کند؟ در اینصورت باید به همون صورت یک مقایسه به شرط اضافه کنید(به صورت OR || به همون صورت که خالی بودن چک شده)
برای انتخاب چند آیتم و دخیل کردن اونها در شرط، میتونید یک لیست از آیتمهای انتخاب شده کاربر بسازید و از متد Contains استفاده و آیتمهایی را انتخاب کنید که استان شان در این لیست هست.

Helpco
شنبه 24 تیر 1396, 07:48 صبح
منظورتون از سوال اول، یعنی عبارت "نامشخص" اگر انتخاب شد ، همه رو لود کند؟ در اینصورت باید به همون صورت یک مقایسه به شرط اضافه کنید(به صورت OR || به همون صورت که خالی بودن چک شده)

برای این مورد انجام دادم ولی همه رو نشون نمیده میشه کد بهم بدید


برای انتخاب چند آیتم و دخیل کردن اونها در شرط، میتونید یک لیست از آیتمهای انتخاب شده کاربر بسازید و از متد Contains استفاده و آیتمهایی را انتخاب کنید که استان شان در این لیست هست.
ممکن بیشتر برام توضیح بدید؟

Mahmoud.Afrad
شنبه 24 تیر 1396, 17:18 عصر
.Where(x => x.MelkFor.Archive == 1 &&
x.MelkFor.MelkType == TypeProperty.Text &&
(string.IsNullOrEmpty(SelectState.Text) ||
SelectState.Text == "نامشخص" ||
requestedStates.Contains(x.MelkFor.State)
)
)
requestedStates لیستی هست که استانهای انتخابی کاربر رو بهش اضافه کردید.

Helpco
چهارشنبه 04 مرداد 1396, 13:15 عصر
.Where(x => x.MelkFor.Archive == 1 &&
x.MelkFor.MelkType == TypeProperty.Text &&
(string.IsNullOrEmpty(SelectState.Text) ||
SelectState.Text == "نامشخص" ||
requestedStates.Contains(x.MelkFor.State)
)
)
requestedStates لیستی هست که استانهای انتخابی کاربر رو بهش اضافه کردید.

سلام من یک لیست درست کردم

List<String> frt= new List<string>();

و داخل شرطم اینو نوشتم


&& frt.Contains(x.MelkFor.chalich)

اما شرط اعمال نمیشه یعنی ایتم لیست در chalich جستجو نمیشه

Mahmoud.Afrad
چهارشنبه 04 مرداد 1396, 14:44 عصر
کد کاملتر بزارید. اینکه لیست رو چجور پر میکنید و کوئری کامل.

barnamenevisjavan
پنج شنبه 05 مرداد 1396, 20:29 عصر
سلام منم زیاد با این نال بودن مشکل داشتم اما چیزی که مشکل رو قطعی حل میکنه وقتی اطلاعات رو میخونید از FirstOrDefault استفاده کنید ک اگ نال باشه خودش مقدار پیشفرض میده (0).
یا اینکه اگه شرط میزارید حتما شرطتتون به این صورت باشه if(data !=null) {}...

Helpco
یک شنبه 08 مرداد 1396, 08:21 صبح
سلام منم زیاد با این نال بودن مشکل داشتم اما چیزی که مشکل رو قطعی حل میکنه وقتی اطلاعات رو میخونید از FirstOrDefault استفاده کنید ک اگ نال باشه خودش مقدار پیشفرض میده (0).
یا اینکه اگه شرط میزارید حتما شرطتتون به این صورت باشه if(data !=null) {}...

سلام ممکن یک نمونه کد بزارید؟