مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

dadkhah100

عضویت از 1396/07/20

دسترسی به Select دوم در Entity Framwork

  • شنبه 13 آبان 1396
  • 16:17
تشکر میکنم

با سلام

دستور زیر را دارم و میخواهم به UserID که در Select دوم هست دسترسی داشته باشم

            var q = oDB.Posts
                .Where(t => t.CrawlDate.Account.Gender == "Female")
                .GroupBy(t => SqlFunctions.DatePart("week", t.Date))
                .Select(g => new
                {
                    Week = g.Key,
                    AllPostInWeek = g.Count(),
                    PostDate = g.Select(s => new
                    {
                        Date = s.Date.Substring(0, 10),
                        Spam=s.CrawlDate.Account.Spam,
                        UserName= s.CrawlDate.Account.UserName,
                        UserID= s.CrawlDate.Account.AccountID,
                    })
                    //.Where(t=>t.UserID== 2)
                    .GroupBy(t => SqlFunctions.DatePart("day", t.Date))
                })
               .ToList();

از روش زیر به Week و AllPostInWeek دسترسی دارم ولی به پراپرتی های Select دوم نه.

                var q1 = q.Where(t => t.Week == 2).ToList();

پاسخ های این پرسش

تعداد پاسخ ها : 7 پاسخ
کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • شنبه 13 آبان 1396
  • 16:57

قبل از Select متد Where را قرار بدید، پس از استفاده از Select شما یک anonymous type بازگردانی می کنید برای همین نمیتوان دستور Where را برروی آن اعمال کنید.

کاربر سایت

dadkhah100

عضویت از 1396/07/20

  • شنبه 13 آبان 1396
  • 17:08

قبل از کدام Select?

دستور where یک شرط نیاز داره و چه شرطی قرار بدم.

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • شنبه 13 آبان 1396
  • 17:10

شما میخواید برای خصوصیت PostData شرط بزارید اگر درست فهمیده باشم، حال باید آن Where را قبل از Select قرار بدید مانند کد زیر :

var q = oDB.Posts
    .Where(t => t.CrawlDate.Account.Gender == "Female")
    .GroupBy(t => SqlFunctions.DatePart("week", t.Date))
    .Select(g => new
    {
        Week = g.Key,
        AllPostInWeek = g.Count(),
        PostDate = g.Where(t=>t.UserID== 2).Select(s => new
        {
            Date = s.Date.Substring(0, 10),
            Spam=s.CrawlDate.Account.Spam,
            UserName= s.CrawlDate.Account.UserName,
            UserID= s.CrawlDate.Account.AccountID,
        })
        .GroupBy(t => SqlFunctions.DatePart("day", t.Date))
    })
   .ToList();

کاربر سایت

dadkhah100

عضویت از 1396/07/20

  • شنبه 13 آبان 1396
  • 17:24

نه. این را بلدم.حتی بعدشم هم میشه گذاشت.

من با این دستور کل اکانت ها را بررسی میکنم و گروه بندی میکنم.

بعد در یک حلقه می خواهم همین شرطی که شما قرار دادید را دوباره برای هر اکانت روی این q اجرا کنم. یعنی یکبار 1 و 2 و 3 و ...

به این صورت

var q1 = q.Where(t => t.Week == 2).ToList();

در این دستور من به week دسترسی دارم ولی به پراپرتیهای داخل select دوم دسترسی ندارم

یعنی اگر بنویسم

                var q1 = q.Where(t => t.PostDate.UserId == 2).ToList();

خطا میگیره و UserID را نمیشناسه

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • شنبه 13 آبان 1396
  • 17:41

PostData یک لیست است ؟

کاربر سایت

dadkhah100

عضویت از 1396/07/20

  • شنبه 13 آبان 1396
  • 18:02

امکانش هست اون دستوری ک مشکل دارم را بهم بدید. اون ی خط را چی بنویسم. اگر بخوام q را هر بار بر اساس یک UserID جستجو کنم.

ممنون

کاربر سایت

dadkhah100

عضویت از 1396/07/20

  • شنبه 13 آبان 1396
  • 18:56

جوابی نبود؟خب لیست میتونه باشه دیگه.

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)