PDA

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



hamid_kha
یک شنبه 26 خرداد 1392, 12:51 عصر
با سلام
بنده یه کوئری با 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
}

forestasphalt
یک شنبه 26 خرداد 1392, 14:52 عصر
var s=from p in DataContext.Activities.Select(p=>p.UserID) select p;
var q = from a in DataContext.Users
where !s.Contains(a.UserID)
select new { a.Username, a.RoleID };

hamid_kha
یک شنبه 26 خرداد 1392, 17:53 عصر
var s=from p in DataContext.Activities.Select(p=>p.UserID) select p;
var q = from a in DataContext.Users
where !s.Contains(a.UserID)
select new { a.Username, a.RoleID };

:تشویق:مرسی دمت گرم- مشکلم حل شد البته با کمی تغییرات در کد- چون پیغام خطا میداد
اصلاح شده:


var s=(from p in DataContext.Context.Activities.Select(p=>p.ArtistID) select p).ToList().Distinct();
var q = (from a in DataContext.Context.Users
where !s.Contains(a.UserID)
select new { a.Username, a.RoleID,a.UserID }).ToList();
e.Result = q;

یه سوال داشتم من از resharper -VS2010 استفاده میکنم ولی در بعضی وقتها موقعی که با linq مینویسم خاصیت Intellisence فعال نیست و یکسری از فیلدهایی رو باید نشون بده رو نمیده .
؟؟؟؟؟Extension ای سراغ دارید که بشه توی VS2010 بشه با linq بهتر کار کرد؟؟؟؟
-مرسی از راهنماییتون- :لبخندساده::لبخندساده::لبخن ساده::لبخندساده::لبخندساده: