Помогите с запросом linq с подзапросами

2

может кто-нибудь помочь?, я застрял с запросом linq..

В основном у меня есть стандартный запрос linq, который возвращает поля, 1 поле (страховки) на самом деле является другим запросом linq, таким образом

   // original from this in etc not included to keep msg short>
    select new Models.Custom.House.Insurance()
               {
                   Id = v.IdHouse,
                   Insurances = from gt in GroupHouseTariffs
                                join  i in InsuranceGroup
                                    on new { gt.IdTariff, gt.IdGroup}
                                       equals
                                       new { i.IdTariff, i.IdGroup}
                                select new
                                       {
                                           InsuranceId = i.Id,
                                           Price = i.Price
                                       }

в основном страхование ввозится в страховое имущество от Model.Custom.House, он работает, как я вижу это в моем отладке... у меня есть 4 записи в страховании.. страхование определяется как это в Доме, который в основном Iqueryable другого небольшого класса.

       public IQueryable<Insurance> Insurances { get; set;}

Итак, я попытался написать метод расширения, например

    public static IQueryable<House> WithInsuranceId(this IQueryable<House> qry, int insuranceId)
    {
        return from h in qry
               where h.Insurance .. // BUT here is the problem i don't see my properties, I see plenty of linq methods

    }

Я должен уметь видеть insuranceId и делать это, нет?

    return from h in qry
               where h.Insurance.InsuranceId == 1;

Вот класс (его очень маленький)

    public class Insurance
    {
        public int? InsuranceId { get; set; }
        public float? price{ get; set; }
    }

Может быть, есть какая-то специальная лямбда, которую мне нужно знать о:-)?

Любая помощь действительно ценится, спасибо.

  • 0
    Какую ошибку времени компиляции вы получите, если на самом деле скажете, where h.Insurance.InsuranceId == 1; ?
  • 0
    Ну, на самом деле перед компилятором я вижу его красным, но если я скомпилирую, я получаю 'System.Linq.IQueryable <Models.Custom.House.Insurance>', который не содержит определения для «InsuranceId» и не имеет метода расширения «InsuranceId», принимающего первый аргумент типа 'System.Linq.IQueryable <Models.Custom.House.Insurance>' может быть найден
Теги:
linq
lambda
linq-to-sql

1 ответ

2
Лучший ответ

Есть ли опечатки в представленном вами образце?

Я заметил следующее:

// No object name specified, Price has a capital P
select new
{
    InsuranceId = i.Id,
    Price = i.Price
}

// Price has a small p
public class Insurance
{
    public int? InsuranceId { get; set; }
    public float? price{ get; set; }
}

Теперь ваш фактический запрос выглядит неправильно и для меня.

У House.Insurance есть свойство, называемое идентификатором, и свойство под названием "Страховки", которое представляет собой коллекцию. Однако ваш запрос гласит:

 return from h in qry
           where h.Insurance.InsuranceId == 1;

Вы имеете в виду:

return from h in qry
           where h.Insurance.Id == 1 select h;

Или:

return from h in qry
           where h.Insurance.Insurances.Contains(i => i.InsuranceID ==1) select h;
  • 0
    Да проверь :-) упс ... но это все! .. содержит .. работает удовольствие спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню