0

こんにちは私はCRM2011で複数のエンティティに参加しようとしていますが、{"'xrmsm_sessionEnrollments'エンティティにName='xrmsm_termsid'の属性が含まれていません。"}というエラーが表示されます。それは正しいですが、私はその属性を持つエンティティに参加しています。

私のLinqクエリ:

var query2 = from e in svsContext.xrmsm_sessionEnrollmentsSet

        join s in svsContext.xrmsm_sessionsSet on e.xrmsm_SessionLookup.Id equals s.xrmsm_sessionsId
        join ic in svsContext.xrmsm_institutionCoursesSet on s.xrmsm_institutionCourseLookup.Id equals ic.xrmsm_institutionCoursesId
        join ts in svsContext.xrmsm_term_sessionsSet on e.xrmsm_termSessionLookup.Id equals ts.xrmsm_term_sessionsId
        join t in svsContext.xrmsm_termsSet on ts.xrmsm_TermLookup.Id equals t.xrmsm_termsId
        where (e.xrmsm_StudentLookup.Equals(studentlookup)
               && e.xrmsm_YearLookup.Equals(entity.GetAttributeValue("xrmsm_studentlookup"))
               && ic.xrmsm_institutionCoursesId == institutionCourseGuid
               && t.xrmsm_termsId == termGuid)
        select new { sessionName = s.xrmsm_sessionsName, StudentName = e.xrmsm_studentsName, StudentId = e.xrmsm_StudentLookup.Name };

SQL Serverで機能する元のSQLクエリ:

SELECT en.xrmsm_currentsessionenrollmentsname
      ,en.xrmsm_isreadonlyname
      ,en.xrmsm_sessionenrollmentsaverage
      ,en.xrmsm_sessionenrollmentsgrade
      ,en.xrmsm_sessionenrollmentsid
      ,en.xrmsm_sessionenrollments_id
      ,en.xrmsm_sessionlookup as sessionid
      ,en.xrmsm_sessionlookupname
      ,en.xrmsm_sessionsname
      ,en.xrmsm_studentlookup AS studentid
      ,en.xrmsm_studentlookupname
      ,en.xrmsm_studentsname
      ,en.xrmsm_termsessionlookup
      ,en.xrmsm_termsessionlookupname
      ,en.xrmsm_withdrawal
      ,en.xrmsm_yearaverage
      ,en.xrmsm_yeargrade
      ,en.xrmsm_yearlookup
      ,en.xrmsm_yearlookupname
  FROM CoseyTest_MSCRM.dbo.Filteredxrmsm_sessionEnrollments as en INNER JOIN 
  CoseyTest_MSCRM.dbo.Filteredxrmsm_sessions crmsessions ON 
  (en.xrmsm_sessionlookup = crmsessions.xrmsm_sessionsid AND en.xrmsm_yearlookup = crmsessions.xrmsm_yearlookup)
  INNER JOIN Filteredxrmsm_institutionCourses institutionCourses
  on crmsessions.xrmsm_institutioncourselookup = institutionCourses.xrmsm_institutioncoursesid
  Inner Join Filteredxrmsm_term_sessions as termsession
  on en.xrmsm_termsessionlookup = termsession.xrmsm_term_sessionsid
  Inner Join Filteredxrmsm_terms as terms
  on termsession.xrmsm_termlookup = terms.xrmsm_termsid 
  where en.xrmsm_yearlookup = '4BA07BED-3F51-E211-8359-00155D004403' 
  and en.xrmsm_studentlookup = 'C844AF65-5B51-E211-8359-00155D004403'
  and terms.xrmsm_termsid = 'D1D107B7-4551-E211-8359-00155D004403' 
  and institutionCourses.xrmsm_institutioncoursesid = '2121914E-4551-E211-8359-00155D004403'
4

3 に答える 3

1

生成している実際のクエリを見て、それを SQL で実行してみてください。何が起こっているのかを理解するのに役立つかもしれません。

paramoshが述べたように、LINQで行っていることはCRMでは利用できない可能性がありますが、私に飛び出すものは何も見えません。

于 2013-03-22T10:39:34.240 に答える
1

CRM の Linq プロバイダーにはいくつかの制限があります。ここで見つけることができます。クエリが制限に違反しているかどうかを確認してください。

于 2013-03-22T10:14:47.987 に答える
1

ご回答ありがとうございます。次の回避策を実行しました。

  1. すべての学生登録のリストを取得するクエリを作成します

  2. クラスの Find メソッドを使用して、探しList<T>ている条件のレコードが存在するかどうかを確認します。

     var query2 = (from e in svsContext.xrmsm_sessionEnrollmentsSet
                     join s in svsContext.xrmsm_sessionsSet on e.xrmsm_SessionLookup.Id equals s.xrmsm_sessionsId
                     join ic in svsContext.xrmsm_institutionCoursesSet on s.xrmsm_institutionCourseLookup.Id equals ic.xrmsm_institutionCoursesId
                     join ts in svsContext.xrmsm_term_sessionsSet on e.xrmsm_termSessionLookup.Id equals ts.xrmsm_term_sessionsId
                     join t in svsContext.xrmsm_termsSet on ts.xrmsm_TermLookup.Id equals t.xrmsm_termsId
                     where (e.xrmsm_StudentLookup.Equals(studentlookup))
                     select new
                     {
                         EnrollmentId = e.xrmsm_sessionEnrollments_id,
                         SessionId = s.xrmsm_sessions_id,
                         EnrollmentYear = e.xrmsm_YearLookup,
                         InstitutionCourseId = (Guid)ic.xrmsm_institutionCoursesId,
                         TermId = (Guid)t.xrmsm_termsId,
                         Student = e.xrmsm_StudentLookup
                     }).ToList();
    
    
        var q = query2.Find(r => r.EnrollmentYear.Id == entity.GetAttributeValue<EntityReference>("xrmsm_yearlookup").Id
                             && r.InstitutionCourseId == institutionCourseGuid
                             && r.TermId == termGuid);
    
于 2013-03-28T23:42:06.907 に答える