ورود

View Full Version : حرفه ای: مشکل در اجرای کد نوشته شده با linq



hamid_kha
شنبه 25 خرداد 1392, 17:37 عصر
با سلام
بنده یه کوئری با sql نوشتم و با برنامه linqer هم کدها رو با linq بازنویسی کردم مشکلی که وجود داره اینه که توی برنامه linqer هم کد sql و هم linq درست جواب میده ولی وقتی میخوام کامپایل کنم توی linqer با پیغام زیر مواجه میشم:


Error Compiling Expression: Error Compiling Expression: Delegate 'System.Func<eShop.Model.Users,int,bool>' does not take 1 arguments
Cannot convert lambda expression to type 'string' because it is not a delegate type
'System.Linq.IQueryable<AnonymousType#1>' does not contain a definition for 'Contains' and the best extension method overload 'System.Linq.ParallelEnumerable.Contains<TSource>(System.Linq.ParallelQuery<TSource>, TSource)' has some invalid arguments
Instance argument: cannot convert from 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.ParallelQuery<AnonymousType#2>'


مشخصات جدولها:
جدولUsers شامل فیلدهای:UserID,Username,RoleID
و جدول Activities شامل فیلدهای:ActivityID,ArtistID,....
کوئری که میخوام اینه:
لیست کاربرانی رو میخام برگردونه که در جدول Activities رکوردی را ثبت نکرده اند:
توی sql:


select Username,RoleID from Users
where RoleID=2 AND UserID not in(select ArtistID from Activities)

اینم کد linq که بازنویسی شده توسط linqer:


from users in DataContext.Users
where
users.RoleID == 2 &&

(from activities in DataContext.Activities
select new {
activities.ArtistID
}).Contains(new { users.UserID })
select new {
users.Username,
users.RoleID
}

hamid_kha
یک شنبه 26 خرداد 1392, 12:49 عصر
از دوستان یکی راهنماییم کنه
مرسی:لبخندساده:

parvizwpf
دوشنبه 27 خرداد 1392, 11:33 صبح
یه خورده کدتن پیچیدس میتونستید با یه join تمومش کنید خیلی سلکت اضافی دارید. من احساس میکنم خطا داره یا از نوع تبدیل و یا خروجی کوئری شما ایراد میگیره.

mo.esmp
دوشنبه 27 خرداد 1392, 13:36 عصر
(from activities in DataContext.Activities
select new {
activities.ArtistID
}).Contains(new { users.UserID })
در اینجا دارید چه شرطی را بررسی میکنید ؟

Mahmoud.Afrad
دوشنبه 27 خرداد 1392, 20:09 عصر
با Any میتونید وجود یا عدم وجود را چک کنید:

var query = from user in DataContext.Users
where user.RoleID == 2 && !DataContext.Activities.Any(item => item.ArtistID == user.id)
select user;