-1

こんにちは、エンティティ選択クエリでストアド プロシージャを呼び出そうとしています。しかし、私はエラーが発生しました。まずは外側の手順をチェック。

  var img = dc.get_User_Image(1).FirstOrDefault();  
  var Task = from tbl_Task tsk in dc.tbl_Task
             join tmp in dc.tbl_TaskAssignment 
             on tsk.TaskID equals tmp.TaskID into jointable
             from tmp in jointable.DefaultIfEmpty()
             join ct in dc.tbl_User on tmp.AssignTo equals ct.UserID
             where tsk.IsDeleted == false && tsk.TaskID == IntTaskID && 
             tmp.IsDeleted == false
             select new
             {
                TaskID = tsk.TaskID,
                TaskDesc = tsk.Remarks,
                TaskTitle = tsk.TaskTitle,
                TaskEmpName = tmp.tbl_User.tbl_Contact.FirstName_EN,
                TaskEmpID = tmp.AssignTo,
                profileImage = "",
                Priority = tsk.Priority,
                TaskCompletedPercentage = tmp.CompletedPercentage

              };

エラーなし。結果を得た。ただし、コードを次のように変更します。

 var Task = from tbl_Task tsk in dc.tbl_Task
            join tmp in dc.tbl_TaskAssignment on tsk.TaskID equals tmp.TaskID into jointable
            from tmp in jointable.DefaultIfEmpty()
            join ct in dc.tbl_User on tmp.AssignTo equals ct.UserID
            where tsk.IsDeleted == false && tsk.TaskID == IntTaskID && 
            tmp.IsDeleted == false

            select new
            {
               TaskID = tsk.TaskID,
               TaskDesc = tsk.Remarks,
               TaskTitle = tsk.TaskTitle,
               TaskEmpName = tmp.tbl_User.tbl_Contact.FirstName_EN,
               TaskEmpID = tmp.AssignTo,
               profileImage = dc.get_User_Image(tmp.AssignTo).FirstOrDefault(),
               Priority = tsk.Priority,
               TaskCompletedPercentage = tmp.CompletedPercentage
           };

エラーが発生しました

LINQ to Entities はメソッド 'System.Data.Objects.ObjectResult 1[System.String] get_User_Image(System.Nullable1[System.Int64])' メソッドを認識せず、このメソッドはストア式に変換できません。

" dc.get_User_Image " は "ユーザー ID" (Int) を受け取り、イメージ パス (文字列) を返します。最初のコードでは、関数を個別にチェックしています。それはうまくいきます。クエリの選択で、これを呼び出します->「profileImage = dc.get_User_Image(tmp.AssignTo).FirstOrDefault()」。エラーをスローしました

私はなぜ理解できませんか?助けてください。

4

2 に答える 2

2

dc.get_User_Image(tmp.AssignTo)おそらく、データベース内のストアド プロシージャへのアクセスをラップする実際の CLR メソッドです。それ自体は実際のストアド プロシージャではありません。

Entity Framework は、任意のメソッドへの呼び出しを SQL に変換できないため、エラー メッセージが表示されます。関数を使用できるようにするには、クエリ (例: ) を具体化してから、変換関数 ( ) を実行する必要ToList()がありますSelect new {...}

于 2013-09-18T16:13:18.167 に答える
1
 var Task = (from tbl_Task tsk in dc.tbl_Task
        join tmp in dc.tbl_TaskAssignment on tsk.TaskID equals tmp.TaskID into jointable
        from tmp in jointable.DefaultIfEmpty()
        join ct in dc.tbl_User on tmp.AssignTo equals ct.UserID
        where tsk.IsDeleted == false && tsk.TaskID == IntTaskID && 
        tmp.IsDeleted == false

        select new
        {
           TaskID = tsk.TaskID,
           TaskDesc = tsk.Remarks,
           TaskTitle = tsk.TaskTitle,
           TaskEmpName = tmp.tbl_User.tbl_Contact.FirstName_EN,
           TaskEmpID = tmp.AssignTo,

           Priority = tsk.Priority,
           TaskCompletedPercentage = tmp.CompletedPercentage
       }).AsEnumerable().select(row=> new {
task = row,
profileImage = dc.get_User_Image(tmp.AssignTo).FirstOrDefault()

}))

于 2013-09-24T10:34:22.457 に答える