PDA

View Full Version : شرط or در linq



farhadjokers
سه شنبه 03 بهمن 1391, 23:38 عصر
با سلام من یک query دارم که 2 تا شرط or رو ترکیب کردم ! و میخوام حالا ببینیم کدوم یکی از شرطها اتفاق افتاده که باعث ایجاد شرایط من شده است .

در واقع میخوام بدونم از دو شرط (c.nameHome == item.nameHome || c.nameguest==item.nameguest
کدامیک true شده است ! چور میتونم چنین کاری رو انجام بدهم .متشکر



var query1 = from p in db.Soccer where result==false select p;

foreach (var item in query1)
{

var query2= (from c in db.Soccer
where (c.nameHome == item.nameHome || c.nameguest==item.nameguest )
&& result==true
orderby c.datetime descending
select c).take(2);

foreach (var item1 in query2)
{

}
.
..
...
}

mo.esmp
چهارشنبه 04 بهمن 1391, 13:09 عصر
میتونی بسورت ٢تا کوئری بنویسی که اگە نتیجه اولی null بود کوئری دوم اجرا بشه اینجوری میتونی بفهمی که کدوم یکی اجرا شده.

farhadjokers
چهارشنبه 04 بهمن 1391, 13:12 عصر
میتونی بسورت ٢تا کوئری بنویسی که اگە نتیجه اولی null بود کوئری دوم اجرا بشه اینجوری میتونی بفهمی که کدوم یکی اجرا شده.

میتونی بیشتر توضح بدی با همین مثال بالا ؟

mo.esmp
چهارشنبه 04 بهمن 1391, 13:40 عصر
bool isHome = true;
IEnumerable query;
query = (from c in db.Soccer
where (c.nameHome == item.nameHome)
&& result == true
orderby c.datetime descending
select c).take(2);
if (!query.Any())
{
query = (from c in db.Soccer
where (c.nameguest == item.nameguest)
&& result == true
orderby c.datetime descending
select c).take(2);
isHome = false;
}

farhadjokers
چهارشنبه 04 بهمن 1391, 14:04 عصر
خیلی ممنون از لطف بی دریغ شما ! تست میکنم انشاله که جواب مثبت هست ! خیلی محبت کردی :قلب:

farhadjokers
پنج شنبه 05 بهمن 1391, 00:43 صبح
'System.Collections.IEnumerable' does not contain a definition for 'Any' and no extension method 'Any' accepting a first argument of type 'System.Collections.IEnumerable' could be found (are you missing a using directive or an assembly reference?)

دوست عزیز ممنون میشم راهنمایی کنید ! collection هم پیش فرض اضافه شده ! روی این خط ارور میده
if (!query.Any())

farhadjokers
پنج شنبه 05 بهمن 1391, 01:59 صبح
مشکل حل شد بازهم متشکر !

farhadjokers
پنج شنبه 05 بهمن 1391, 12:43 عصر
متاسفانه حالا برنامه درست کار نمیکنه ! ببینین برنامه باید دو بازی قبل رو از تو بانک پیدا کنه ! حالا ممکنه این تیم یکبار میزبان بوده باشه یکبار میهمان ! با برنامه قبلی من پیدا میکرد اما من نمیتونستم بفمم میزبان بوده یا میهمان ! حالا با برنامه شما چون take 2 داره میره 2 بازی قبل که در خونه داشته رو بر میداره !

تو همون روش کد خودم نمیشه به نوعی پی برد که کدوم شرط برقرار شده ؟


bool isHome = true;
IEnumerable query;
query = (from c in db.Soccer
where (c.nameHome == item.nameHome)
&& result == true
orderby c.datetime descending
select c).take(2);
if (!query.Any())
{
query = (from c in db.Soccer
where (c.nameguest == item.nameguest)
&& result == true
orderby c.datetime descending
select c).take(2);
isHome = false;
}

mo.esmp
جمعه 06 بهمن 1391, 00:51 صبح
خوب توسیه من اینه یک فیلد دیگه داخل مدل تعریف بشه به نام IsHost که برای بازیهایی کی تیم میزبان هست برابر true بشه و برای بازیهایی که میهمان هست false بشه و با کوئری که خودتون نوشتین ٢ بازی قبل بگرین و با استفاده از همین فیلد مشخص کنین که تیم مهمان بوده یا میزبان (نحوه نوشتن کوئریهاتون زیاد بهینه به نزر نمیرسه و حلقه های تکرار زیاد دارە و فکر کنم دفعات مراجعه به دیتابیس برای گرفتن اطلاعات زیاد باشه).