PDA

View Full Version : درست بودن یا نبودن نتیجه یک کوئری



R_Rajaee_Rad
چهارشنبه 27 بهمن 1389, 20:03 عصر
این یه کوئری linq هست

میخوام بدونم چه طوری با دستورات شرطی میشه فهمید نتیجه این کوئری null میشه (یعنی همچین رکوردی پیدا نشده) یا نه

با تشکر..


Dim kum = (From p In db.Queue_Drivers _
Where p.id = SelectedId Select p).Single()

PetekDincos
پنج شنبه 28 بهمن 1389, 19:48 عصر
با سلام
شما می تونید در کوئری تون از Any و یا به جای Single از SingleOrDefault استفاده کنید که Any یک مقدار bool بر می گردونه و اگر از SingleOrDefault استفاده کنید می تونید متغییرتون را برای null بودن بررسی کنید اگر منظورتون رو درست متوجه شده باشم

R_Rajaee_Rad
جمعه 29 بهمن 1389, 07:33 صبح
اول هم با SingleOrDefault نوشته بودم
اما نمیدونم چه طوری با IF مقدارش رو چک کنیم
اگر یه نمونه اش رو بنویسید متشکر میشم

PetekDincos
جمعه 29 بهمن 1389, 09:19 صبح
با سلام
در هنگام استفاده از SingleOrDefault اگر کوئری برگشتی نداشته باشد مقدار پیش فرض اون نوع و در مثال شما نوع p رو بر می گردونه مثلا برای نوع int مقدار پیش فرض 0 است اما برای نوع ?int مقدار پیش فرض null است و من نمی دونم نوع p شما چیه اما اگر دستور if رو به صورت زیر بنویسی در اکثر مواقع جواب می ده


if(p==null || p==0)
//null

با تشکر

R_Rajaee_Rad
جمعه 29 بهمن 1389, 10:31 صبح
توی برنامه بعد از اتمام کوئری-برنامه دیگه اصلا p رو نمیشناسه!!
و فکر کنم باید kum رو چک کرد به این صورت



If kum = 0 Then
db.Queue_Drivers.DeleteOnSubmit(kum)
End If
و اگر بخوام kum رو چک کنم این خطا رو میده Operator '=' is not defined for types 'Milano.Queue_Driver' and 'Integer'.

PetekDincos
جمعه 29 بهمن 1389, 11:15 صبح
با سلام
اون کوئری که می گیری فکر کنم از یک جدول که به یک ORM نگاشت شده و وقتی که یک جدول به یک ORM نگاشت می شه یک کلاس از نوع اون جدول تولید می کنه و برای فهمیدن نوع کوئریت یک عمل cast انجام بده
همون جا اگر cast ات درست نباشه حطای سینتکس نشون می ده و نوع رو می نویسه و برای مثال ما یک کلاس داریم به این صورت




public class MyClass

{
public int ID { get; set; }
public string Name { get; set; }
}

List<MyClass> myClass = new List<MyClass>()
{
new MyClass{ID=1,Name="Ali"},
new MyClass{ID=2,Name="Mehdi"}
};
var query = (from n in myClass
where n.ID == 5
select n).SingleOrDefault();
if (query == null)
MessageBox.Show("query is Null");
else

MessageBox.Show("query Not Null");


اگر کوئری مقداری رو برگشت نده مقدار null رو خواهد داشت

R_Rajaee_Rad
جمعه 29 بهمن 1389, 12:39 عصر
دوست عزیز خیلی پیچوندیش!!!

یعنی باید من برای تک تک فیلد های جدول بیام توی کلاس و....

یعنی هیچ راهی دیگه ای وجود نداره برای فهمیدن خروجی یه کوئری؟