PDA

View Full Version : خطای Unable to create a constant value of type در LINQ



Cybersilent
یک شنبه 19 خرداد 1392, 12:35 عصر
به نظر دوستان مشکل کد زیر چیه؟

public ActionResult ShowLinkSubLink(Guid id)
{
Link link = db.Links.FirstOrDefault(x => x.Id == id);

Guid cityId = (TempData["cityId"] != null ? new Guid(TempData["cityId"].ToString()) : new Guid("70044cdc-4d4a-432d-89a7-3c48936f2649"));
IEnumerable<Link> links =
db.Links.Where(
x => (x.Type == (link == null ? 1 : 2) || x.Type == (link == null ? 1 : 3)) && (x.OwnerLink == null || x.OwnerLink.Id == id) && x.City.Id == cityId).
OrderBy(y => y.Subject);
return View("Index", links);
}


هر وقت برنامه رو اجرا می کنم این پیغام خدا رو میده :
Unable to create a constant value of type 'BookLibrary.Models.DataBase.Link'. Only primitive types or enumeration types are supported in this context.

parvizwpf
دوشنبه 20 خرداد 1392, 00:48 صبح
توی view بنویس :
links.ToList();

Cybersilent
دوشنبه 20 خرداد 1392, 09:15 صبح
متاسفانه باز هم درست نشد.
شی link رو هم بررسی کردم null نیست

parvizwpf
سه شنبه 21 خرداد 1392, 20:17 عصر
ببینید این خطا میگه من دارم اطلاعات شما رو روی ویو و خروجی میبرم ولی دیتای لود شده بصورت lazy لود شده پس باید احتمالا انتهای دستور لینکتون اون رو مستقیما بو نوع خروجی تبدیل کنید مثل toList

mehdi.mousavi
سه شنبه 21 خرداد 1392, 21:22 عصر
به نظر دوستان مشکل کد زیر چیه؟ هر وقت برنامه رو اجرا می کنم این پیغام خدا رو میده :
Unable to create a constant value of type 'BookLibrary.Models.DataBase.Link'. Only primitive types or enumeration types are supported in this context.

سلام.
حدس میزنم ایراد از اون بخشی از شرط ناشی میشه که نوشته اید link == null. احتمالا اون بخش از where clause هستش که داره این مشکل رو ایجاد میکنه.
لطفا اونو با ID یا خصیصه Unique ای در Link Object اتون جایگزین کنید و ببینید مشکل رفع میشه یا خیر. فرضا، اگر link == null بود، linkid رو صفر در نظر بگیرید،
اگر هم نبود، linkid رو id ی اون link. سپس در شرط جای link از linkid استفاده کنید...

موفق باشید.

mo.esmp
سه شنبه 21 خرداد 1392, 23:33 عصر
همونطور که دوستمون mehdi.mousavi گفتن مشکل از جایی ایجاد میشه که دارید شی link در شرط جستجو استفاده میکنید. شما نمیتونید خود شی لینک رو برای شرط جستجو استفاده کنید چون کل شی قابل تبدیل به کوئری SQL نیست بلکه باید از Propertyهای شی link برا شرط جستجو استفاده کنید.