Я начинаю изучать Linq для SQL, и на этот раз я пытался использовать метод «Contains», и у меня написан следующий код - PullRequest
2 голосов
/ 31 декабря 2011

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

Аргументы типа для метода 'System.Linq.Queryable.Contains (System.Linq.IQueryable, TSource)' не могут быть выведены из использования. Попробуйте указать аргументы типа явно.

Когда я запускаю следующий код, я получаю сообщение об ошибке, в котором говорится, что мне нужно явно указать тип аргумента для метода, который содержится.

var result2 = from cltIntake in db.Client_Intakes
              where (from cltElig in db.Client_Eligibility_Referrals
                     where (
                            from cltDoctVerif in db.Doct_Verifications
                            where cltDoctVerif.Verification_Status == "Yes"
                            select cltElig.Asgnd_Caseworker_ID == 6
                            ).Contains(cltElig.Client_Eligibility_ID)
                     select new { client_Eligibility_ID = cltElig.Client_Eligibility_ID }
                    ).Contains(cltIntake.Client_Intake_ID)
                select new
                  {
                      cltInfo.First_Name,
                      cltInfo.Last_Name,

                  };

Я много осматривался и пытался привести к типу int, поскольку коллекция имеет тип int, как показано ниже

.Contains<Int32>(cltElig.Client_Eligibility_ID)

но это породило ошибку, сказав:

Аргумент экземпляра: невозможно преобразовать из 'System.Linq.IQueryable' в 'System.Linq.IQueryable' Аргумент экземпляра: невозможно преобразовать из 'System.Linq.IQueryable' в 'System.Linq.IQueryable'

Я действительно ценю, если кто-нибудь даст мне решение для этого. Дело в том, что я не очень много знаю об IQueryable. Спасибо

1 Ответ

0 голосов
/ 31 декабря 2011

Проблема в том, что ваш выбор создает последовательность анонимных типов, но ваш вызов Contains передается Int

Так что вместо select new { client_Eligibility_ID = cltElig.Client_Eligibility_ID } просто сделайте select cltElig.Client_Eligibility_ID дополнительно у вас есть select cltElig.Asgnd_Caseworker_ID == 6' which is projecting a boolean. You probably wanted && cltElig.Asgnd_Caseworker_ID == 6`

Кроме того, рассмотрите возможность упрощения запроса

var result2 = from cltIntake in db.Client_Intakes
              from cltElig in db.Client_Eligibility_Referrals
              from cltDoctVerif in db.Doct_Verifications
              where cltDoctVerif.Verification_Status == "Yes"
                   && cltElig.Asgnd_Caseworker_ID == 6
                   && cltDoctVerif.Client_Eligibility_ID == 
                          cltElig.Client_Eligibility_ID
                   && cltElig.Client_Eligibility_ID == 
                          cltIntake.Client_Intake_ID
            select new
              {
                  cltInfo.First_Name,
                  cltInfo.Last_Name,
              };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...