نمایش نتایج 1 تا 13 از 13

نام تاپیک: خطا در اجرای کوئری لینک در تابع Async Task

  1. #1

    خطا در اجرای کوئری لینک در تابع Async Task

    سلام من قبلا از طریق کد زیر کوئری مورد نظرم رو داخل تابع async Task اجرا میکردم و بدون مشکل هستش:
            public async static Task<List<DataClass.Tables.Student>> GetAllStudentsAsync()
    {
    using (var db = new DataClass.myDbContext())
    {
    var query = from item in db.Students
    select item;
    return await query.ToListAsync();
    }
    }

    الان نیاز دارم تا اطلاعات رو با جدول دیگه ای ترکیب کنم و بعدش سلکت کنم کدهام رو به این صورت نوشتم:
            public async static Task<List<DataClass.Tables.Student>> GetAllStudentsAsync()
    {
    using (var db = new DataClass.myDbContext())
    {
    var query = from c in db.Schools
    join v in db.Students on c.Id equals v.BaseId
    select new { v.Name, v.LName, v.FName, v.Gender, v.BaseId, v.Image, c.Base };


    return await query.ToListAsync();
    }
    }


    اما در خط
    return await query.ToListAsync();
    برنامه دچار خطا میشه و اجازه کامپایل نمیده چطور این مشکل رو باید حل کنم؟

  2. #2

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

    خب کوئری شما یه لیست ترکیبی رو برمیگردونه اما نوع بازگشتی تابع از نوع لیست student هست، شما میتونین یه کلاس بسازین با فیلدهایی که میخواین برگشت داده بشن، نوع برگشتی تابع رو به اون کلاس تغییر بدین و توی Select نام اون کلاس رو ذکر کنین

  3. #3

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    خب کوئری شما یه لیست ترکیبی رو برمیگردونه اما نوع بازگشتی تابع از نوع لیست student هست، شما میتونین یه کلاس بسازین با فیلدهایی که میخواین برگشت داده بشن، نوع برگشتی تابع رو به اون کلاس تغییر بدین و توی Select نام اون کلاس رو ذکر کنین
    میشه یه مثال بزنید؟ کلاس رو به چه صورت ایجاد کنم؟ چون مثل کلاس های جدول ساختم باز هم همون خطا رو میده

  4. #4

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

    public class SchoolsStudentsJointDto
    {
    public string Name { get; set; }
    public string LName { get; set; }
    public string FName { get; set; }
    public string Gender { get; set; }
    public int BaseId { get; set; }
    public byte[] Image { get; set; }
    public virtual Base Base { get; set; }
    }

    لازم نیست این کلاس رو توی مدلتون پیاده کنین، تو هر جایی از پروژه باشه اشکالی نداره، اما بهتره یه پروژه ایجاد کنین و اینجور کلاسارو داخل اونا تعریف کنین
    به این روش الگوی طراحی شی انتقال داده یا Data Transfer Object یا به اختصار Dto گفته میشه، درموردش جستجو کنین، الگوی کارامدی هستش

  5. #5

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    public class SchoolsStudentsJointDto
    {
    public string Name { get; set; }
    public string LName { get; set; }
    public string FName { get; set; }
    public string Gender { get; set; }
    public int BaseId { get; set; }
    public byte[] Image { get; set; }
    public virtual Base Base { get; set; }
    }

    لازم نیست این کلاس رو توی مدلتون پیاده کنین، تو هر جایی از پروژه باشه اشکالی نداره، اما بهتره یه پروژه ایجاد کنین و اینجور کلاسارو داخل اونا تعریف کنین
    به این روش الگوی طراحی شی انتقال داده یا Data Transfer Object یا به اختصار Dto گفته میشه، درموردش جستجو کنین، الگوی کارامدی هستش
    بسیار ممنون فقط این که کلاسی که نوشتین به مورد اخر گیر میده
        public virtual Base Base { get; set; }



    کلاس Base من ندارم

  6. #6

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

    بنده با توجه به فیلد BaseId فک کردم این فیلد Base یک کلاسه، شما اون رو به نوعی که هست تغییر بدین، و کلمه کلیدی virtual رو حذف کنین

  7. #7

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    بنده با توجه به فیلد BaseId فک کردم این فیلد Base یک کلاسه، شما اون رو به نوعی که هست تغییر بدین، و کلمه کلیدی virtual رو حذف کنین
    من الان طبق فرمایش شما به این صورت تغییر دادم ولی همچنان مشکل پابرجاست:
     public async static Task<List<SchoolsStudentsJointDto>> GetAllStudentsAsync()        {
    using (var db = new DataClass.myDbContext())
    {
    var query = from c in db.Schools
    join v in db.Students on c.Id equals v.BaseId
    select new { v.Name, v.LName, v.FName, v.Gender, v.BaseId, v.Image, v.Id, c.Base };




    return await query.ToListAsync();
    }
    }
    public class SchoolsStudentsJointDto
    {
    public string Name { get; set; }
    public string LName { get; set; }
    public string FName { get; set; }
    public string Gender { get; set; }
    public int BaseId { get; set; }
    public byte[] Image { get; set; }
    public string Base { get; set; }
    }

  8. #8

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

    گفتم که نام کلاس رو در کوئری select ذکر کنین:
    select new SchoolsStudentsJointDto {  Name = v.Name, LName= v.LName, =FName v.FName, Gender= v.Gender, BaseId= v.BaseId, Image = v.Image, Id = v.Id, Base = c.Base };


  9. #9

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    گفتم که نام کلاس رو در کوئری select ذکر کنین:
    select new SchoolsStudentsJointDto {  Name = v.Name, LName= v.LName, =FName v.FName, Gender= v.Gender, BaseId= v.BaseId, Image = v.Image, Id = v.Id, Base = c.Base };

    دوست عزیز بسیار ممنون مشکلم حل شد حواسم به سلکت نبود تشکر از وقتی که گذاشتین

  10. #10

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

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

  11. #11
    مدیر بخش آواتار مهرداد صفا
    تاریخ عضویت
    تیر 1391
    محل زندگی
    select Country,City From World where Country.Name=IRAN and City.Contains(حضرت معصومه(ع))
    پست
    1,499

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

    نقل قول نوشته شده توسط barnamenevisjavan مشاهده تاپیک
    سلام من قبلا از طریق کد زیر کوئری مورد نظرم رو داخل تابع async Task اجرا میکردم و بدون مشکل هستش:
            public async static Task<List<DataClass.Tables.Student>> GetAllStudentsAsync()
    {
    using (var db = new DataClass.myDbContext())
    {
    var query = from item in db.Students
    select item;
    return await query.ToListAsync();
    }
    }

    الان نیاز دارم تا اطلاعات رو با جدول دیگه ای ترکیب کنم و بعدش سلکت کنم کدهام رو به این صورت نوشتم:
            public async static Task<List<DataClass.Tables.Student>> GetAllStudentsAsync()
    {
    using (var db = new DataClass.myDbContext())
    {
    var query = from c in db.Schools
    join v in db.Students on c.Id equals v.BaseId
    select new { v.Name, v.LName, v.FName, v.Gender, v.BaseId, v.Image, c.Base };


    return await query.ToListAsync();
    }
    }


    اما در خط
    return await query.ToListAsync();
    برنامه دچار خطا میشه و اجازه کامپایل نمیده چطور این مشکل رو باید حل کنم؟
    سلام.
    اگر از C#‎‎ 7 استفاده می کنید نیاز به ساخت کلاس جدید ندارید و میتونید از Tuple استفاده کنید.
    نوع و نام فیلد ها رو داخل پرانتز تعریف کنید.



    public async static Task<List<(string Name , string LName,string FName, string Gender,string BaseId,object Image, object Base)>> GetAllStudentsAsync()
    {
    using (var db = new DataClass.myDbContext())
    {
    var query = from c in db.Schools
    join v in db.Students on c.Id equals v.BaseId
    select (v.Name, v.LName, v.FName, v.Gender, v.BaseId, v.Image, c.Base );


    return await query.ToListAsync();
    }


    البته ناگفته نمونه که این روش برای متودهای public الگوی جالبی نیست و بیشتر برای متودهای private و internal مناسبه
    چشم ظاهر گر نبیند عیب نیست چشم دل گر ننگرد باید گریست
    **********
    اَلسَّلامُ عَلَى الْحُسَيْنِ وَ عَلى عَلِىِّ بْنِ الْحُسَيْنِ وَ عَلى اَوْلادِ الْحُسَيْنِ وَ عَلى اَصْحابِ الْحُسَيْنِ

  12. #12

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

    نقل قول نوشته شده توسط مهرداد صفا مشاهده تاپیک
    سلام.
    اگر از C#‎‎‎ 7 استفاده می کنید نیاز به ساخت کلاس جدید ندارید و میتونید از Tuple استفاده کنید.
    نوع و نام فیلد ها رو داخل پرانتز تعریف کنید.



    public async static Task<List<(string Name , string LName,string FName, string Gender,string BaseId,object Image, object Base)>> GetAllStudentsAsync()
    {
    using (var db = new DataClass.myDbContext())
    {
    var query = from c in db.Schools
    join v in db.Students on c.Id equals v.BaseId
    select (v.Name, v.LName, v.FName, v.Gender, v.BaseId, v.Image, c.Base );


    return await query.ToListAsync();
    }


    البته ناگفته نمونه که این روش برای متودهای public الگوی جالبی نیست و بیشتر برای متودهای private و internal مناسبه
    ممنون میشه بگید تفاوت استفاده در متد public و private چیه؟

  13. #13
    مدیر بخش آواتار مهرداد صفا
    تاریخ عضویت
    تیر 1391
    محل زندگی
    select Country,City From World where Country.Name=IRAN and City.Contains(حضرت معصومه(ع))
    پست
    1,499

    نقل قول: خطا در اجرای کوئری لینک در تابع Async Task

    نقل قول نوشته شده توسط barnamenevisjavan مشاهده تاپیک
    ممنون میشه بگید تفاوت استفاده در متد public و private چیه؟
    خواهش می کنم.
    اگر قرار باشه که یک کتابخانه عمومی بنویسید که احتمالا برنامه نویسان دیگه ای از اون استفاده کنند بهتره که مقادیر برگشتی رو درون یک کلاس تعریف کنید و یک کلاس رو برگردونید. اینطوری کد خواناتری خواهید داشت و استفاده از متود ساده تر خواهد بود.
    ولی با توجه به امکان جدیدی که برای نامگذاری آیتمهای Tuple به C#‎ اضافه شده، استفاده از Tuple برای مصرف خودتون و داخل متودهای داخلی کار رو خیلی ساده تر میکنه و خیلی مواقع شما رو از تعریف کلاس جدید برای انتقال داده بی نیاز میکنه.
    یعنی در موارد مشابه به مشکل شما، برای برگردوندن چند مقدار نیاز نیست که یک کلاس جدید تعریف بشه بلکه Tuple اینجا میتونه مفید باشه.
    چشم ظاهر گر نبیند عیب نیست چشم دل گر ننگرد باید گریست
    **********
    اَلسَّلامُ عَلَى الْحُسَيْنِ وَ عَلى عَلِىِّ بْنِ الْحُسَيْنِ وَ عَلى اَوْلادِ الْحُسَيْنِ وَ عَلى اَصْحابِ الْحُسَيْنِ

تاپیک های مشابه

  1. سوال: خطا در اجرای کوئری های عضویت دات نت برروی هاست
    نوشته شده توسط hofa_7 در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: دوشنبه 11 مرداد 1389, 21:24 عصر
  2. خطا در اجرای کوئری
    نوشته شده توسط SAMARE در بخش SQL Server
    پاسخ: 1
    آخرین پست: شنبه 17 بهمن 1388, 10:30 صبح
  3. خطا در اجرای کوئری ساده؟!!!
    نوشته شده توسط ali190 در بخش Access
    پاسخ: 5
    آخرین پست: یک شنبه 27 دی 1388, 20:00 عصر
  4. خطا در اجرای کوئری حاوی کارکتر %
    نوشته شده توسط Narges-s در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 11
    آخرین پست: سه شنبه 03 آذر 1388, 11:37 صبح
  5. خطا در اجرای کوئری به شکل text در دستور exec
    نوشته شده توسط ir_ali_s در بخش SQL Server
    پاسخ: 6
    آخرین پست: سه شنبه 19 اردیبهشت 1385, 15:56 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •