Проблема с запросом LINQ - PullRequest
       1

Проблема с запросом LINQ

1 голос
/ 02 декабря 2009

отлично работает следующее:

                    (from e in db.EnquiryAreas
                            from w in db.WorkTypes
                            where
                            w.HumanId != null &&
                            w.SeoPriority > 0 &&
                            e.HumanId != null &&
                            e.SeoPriority > 0 &&
                            db.Enquiries.Where(f => 
                                f.WhereId == e.Id && 
                                f.WhatId == w.Id && 
                                f.EnquiryPublished != null && 
                                f.StatusId != EnquiryMethods.STATUS_INACTIVE &&
                                f.StatusId != EnquiryMethods.STATUS_REMOVED &&
                                f.StatusId != EnquiryMethods.STATUS_REJECTED &&
                                f.StatusId != EnquiryMethods.STATUS_ATTEND
                            ).Any()
                            select
                            new
                            {
                                EnquiryArea = e,
                                WorkType = w
                            });

Но:

               (from e in db.EnquiryAreas
                            from w in db.WorkTypes
                            where
                            w.HumanId != null &&
                            w.SeoPriority > 0 &&
                            e.HumanId != null &&
                            e.SeoPriority > 0 &&
                            EnquiryMethods.BlockOnSite(db.Enquiries.Where(f => f.WhereId == e.Id && f.WhatId == w.Id)).Any()
                            select
                            new
                            {
                                EnquiryArea = e,
                                WorkType = w
                            });

+

   public static IQueryable<Enquiry> BlockOnSite(IQueryable<Enquiry> linq)
    {
        return linq.Where(e => 
            e.EnquiryPublished != null && 
            e.StatusId != STATUS_INACTIVE &&
            e.StatusId != STATUS_REMOVED &&
            e.StatusId != STATUS_REJECTED &&
            e.StatusId != STATUS_ATTEND
        );
    }

Я получаю следующую ошибку:

base {System.SystemException}: {"Метод 'System.Linq.IQueryable 1[X.Enquiry] BlockOnSite(System.Linq.IQueryable 1 [X.Enquiry])' не поддерживает перевод в SQL."}

Ответы [ 2 ]

1 голос
/ 02 декабря 2009

Хорошо, я решил, используя:

        IQueryable<Enquiry> visibleOnSite = EnquiryMethods.VisibleOnSite(db.Enquiries);

        var combinations = (from e in db.EnquiryAreas
                            from w in db.WorkTypes
                            where
                            w.HumanId != null &&
                            w.SeoPriority > 0 &&
                            e.HumanId != null &&
                            e.SeoPriority > 0 &&
                            visibleOnSite.Where(f => f.WhereId == e.Id && f.WhatId == w.Id).Any()
                            select
                            new
                            {
                                EnquiryArea = e,
                                WorkType = w
                            });
1 голос
/ 02 декабря 2009

Linq to Sql переводит только определенные вызовы методов в SQL, и ваш (BlockOnSite) не входит в их число Отсюда и ошибка. Тот факт, что ваш метод принимает IQueryable<T> и возвращает IQueryable<T>, не делает его особенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...