دسته بندی ها
17:27 1398/10/29

خطا هنگام استفاده از دستور Select در Entity Framework Query String

مشخصات سوال کننده :
کاربر : Nori     امتیاز کاربر : 72     رتبه کاربر : 15
دسته بندی : WPF سی شارپ

به این سوال امتیاز بدهید    2
تعداد بازدید این سوال : 3388
هوش مصنوعی

پاسخ هوش مصنوعی

برای حل مشکل شما در اجرای SELECT با استفاده از Entity Framework و جلوگیری از خطا هنگامی که ستون های غیر انتخاب شده وجود دارد، باید از یک روش دیگر استفاده کنید.

شما در حال حاضر از SqlQuery استفاده می کنید، که به نوع خاصی از داده ها نیاز دارد. بنابراین، اگر فقط برخی از ستون ها را انتخاب کنید، Entity Framework انتظار دارد که تمام ستون هایی که در مدل تعریف شده اند، در خروجی وجود داشته باشند.

در عوض، شما می توانید از LINQ استفاده کنید که از سوی Entity Framework به شکل طبیعی پشتیبانی می شود. به این ترتیب هیچ گونه خطایی در صورت عدم انتخاب تمام ستون ها رخ نخواهد داد.

کدی که برای اجرای این کار می توانید استفاده کنید به صورت زیر است:

var query = from x in database.Vw_Users
            select new 
            {
                x.UserID,
                x.UserName,
                Takmili = x.UserName + "-" + x.UserFamily + "-" + x.UserTel + "-"
            };

در این کد، شما سبکی جدید برای انتخاب ستون ها و همچنین ترکیب آن ها به عنوان یک ستون جدید به نام Takmili استفاده کرده اید. به همین سادگی می توانید بدون ایجاد یک View جدید، از داده های موجود استفاده کنید.

همچنین اگر بخواهید به طور مستقیم از یک کویری خام SQL استفاده کنید، می توانید از این روش استفاده کنید، اما باید ببینید که آیا خروجی با مدل شما مطابقت دارد یا خیر:

var query = database.Database.SqlQuery<YourCustomType>("SELECT UserID, UserName + '-' + UserFamily + '-' + UserTel + '-' AS Takmili FROM Vw_Users");

یادتان باشد که YourCustomType باید کلاسی باشد که در آن فقط شامل پروپرتی هایی که انتخاب کرده اید، باشد.

این روش به شما اجازه می دهد تا بدون نیاز به ویو جدید، داده ها را براساس نیازتان ترکیب کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 17:38 1398/10/29

خب خطا چی هست؟

شما هیچ اشاره ای به خطا نکردید

لطفا سوال رو ویرایش کنید و خطا رو هم در انتها بنویسید

به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
پاسخ دهنده : Sowgandi 19:26 1398/10/29

سلام. این نوع سلکت که زدید مناسب اون خواسته ای که دارید نیست. از این حالت زمانی استفاده کنید که میخواهید کل ستون های یک ویو را انتخاب کنید. برای رفع این مشکل از روش زیر استفاده کنید.

var query = (from x in database.Vw_Users Select new {x.UserID , x.UserName});

داخل { } هر ستونی رو که خواستید داخل کوئری بیاد مثل نمونه بالا قرار بدید.

ویرایش شده در یکشنبه 29 دی 1398 ساعت 19:29:51
به این پاسخ امتیاز بدهید    0
امتیاز: 876 رتبه: 3
پاسخ دهنده : fateme 20:52 1398/10/29

شما توی کوئری خودتون از DataReader استفاده کردید. در DataReader شما که فیلدهای رو از Vw_Customer میگیره فیلدهایی وجود داره که در Select شما وجود نداره. برای این حالت باید به جای استفاده از Select به روش DataReader از دستورات EF استفاده کنید.

 

var query = (from u1 in database.Vw_user select new { u1.firstname, u1.family}).ToList();

به این ترتیب دیگه از قبل یک DataReader شامل اطلاعات و فیلدهای از قبل مشخص ایجاد نمی کنید و به راحتی میتونید کوئری خودتون رو اجرا کنید

به این پاسخ امتیاز بدهید    0
امتیاز: 1635 رتبه: 2
پاسخ دهنده : Sowgandi 09:34 1398/10/30

برای اینکه بتونید دو ستون یا بیشتر رو با هم ترکیب کنید از روش زیر استفاده کنید.

var query = (from x in database.Vw_Users Select new {x.UserID , x.UserName , Takmili = x.UserFamily +'-'+ x.UserTel});

 

ویرایش شده در دوشنبه 30 دی 1398 ساعت 09:37:16
به این پاسخ امتیاز بدهید    1
امتیاز: 876 رتبه: 3
پاسخ دهنده : Nori 11:57 1398/10/30

ممنون از دوستان 
لطف کردین وقت گذاشتین 
راستی سایت چرا اجازه نداد من دیروز پاسخ بدم به نظر دوستان 
هرکی جواب میداد باید میرفتم سوال رو ویرایش میکردم ؟

به این پاسخ امتیاز بدهید    2
امتیاز: 72 رتبه: 15
پاسخ دهنده : Nori 16:23 1398/11/18

اگه بخوایم هرسلکتی که تو اسکیوال میزنیم و جواب میده رو تو سی شارپ بزنیم چیکار باید کرد

 

الان میخوام همچین سلکتی رو بزم که توش از توابع اسکیوال و ... استفاده کردم باید به چه شکلی بزنم 

select Users, City ,SUM(Time) as IdTime , count(Id) as IDcount
from ViewUTime
where 1=1
GROUP BY Users, City

 

به این پاسخ امتیاز بدهید    1
امتیاز: 72 رتبه: 15
پاسخ دهنده : vahdat 17:34 1398/11/22

از نرم افزار Linqer 4.6 استفاده کن 

به این پاسخ امتیاز بدهید    3
امتیاز: 289 رتبه: 5
پاسخ دهنده : Nori 21:12 1398/11/22

عالی بود مرسی

کلی کارمو راحت کردین مرسی

به این پاسخ امتیاز بدهید    1
امتیاز: 72 رتبه: 15
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود