3

MVC3 VS2010 と SQL Server 2008 Express を使用して、2 つの SQL Server テーブルに基づいてフィルタリングし、結果を表示しようとしています。1 つのテーブルはクライアント テーブルで、もう 1 つはエージェント テーブルです。これらは共通の ClientAgentID をクライアント テーブルに持ち、ID を Agents テーブルに持ちます。エージェントはログに記録し、エージェントに割り当てられたクライアントを表示できるはずです。これを行うための最良の方法について何かアイデアがあれば、私を助けてください。これまでのところ、クライアントコントローラーでフィルタリングしようとしていますが、ここに私が持っているものがありますが、メッセージはタイトルにあります。

 public ActionResult Index()
    {
        //This displays all the clients not filtered by the Agent ID number
        //var clientItems = db.MVCInternetApplicationPkg;
        //return View(clientItems.ToList());

        //Trying to filter by the agent name given in the login page then finding 
        //the agent ID

        var getAgentID = from a in db.AgentsPkg
                            where a.AgentLogin == User.Identity.Name
                            select a.ID;

        var clientItems = from r in db.MVCInternetApplicationPkg
                          where Convert.ToString(r.ClientAgentID)
                                == Convert.ToString(getAgentID)
                          select r;
        //THIS IS THE LINE OF CODE THAT SHOWS THE ERROR MESSAGE
        return View(clientItems.ToList());
    }

これは Music Store の後で初めての MVC プロジェクトなので、喜んで学び、助けやアドバイスを受け入れます。乾杯

これが私が最終的に使用したソリューションです。これが良いアプローチである場合は、フィードバックをいただければ幸いです

 public ActionResult Index()
    {

        var innerJoint = from agents in db.AgentsPkg where agents.AgentLogin == User.Identity.Name
                         join clients in db.MVCInternetApplicationPkg on agents.ID equals clients.ClientAgentID
                         select clients;

        return View(innerJoint.ToList());
    }
4

5 に答える 5

3

linq ステートメントで Convert を使用したくない!!!!!

 string clientagentid=Convert.ToString(r.ClientAgentID);
    string getagentid= Convert.ToString(getAgentID);

var clientItems = (from r in db.MVCInternetApplicationPkg
                          where clientagentid==getagentid
                          select r).ToList();
 return View(clientItems);
于 2012-08-22T05:18:31.240 に答える
2

答えは、SqlFunctions.StringConvertを使用することです('decimal' または 'double' を使用しますが、'int' は機能しません) 例を参照してください

using System.Data.Objects.SqlClient ;

var clientItems = from r in db.MVCInternetApplicationPkg
                      where SqlFunctions.StringConvert((double ), r.ClientAgentID)
                            == SqlFunctions.StringConvert((decimal) , getAgentID)
                      select r;

詳細については、 http://msdn.microsoft.com/en-us/library/dd466166.aspxを参照してください。

于 2014-04-29T22:41:43.237 に答える
2

1. エラーの理由:

Convert.ToString()他の人が述べているように、それは句内での使用によるもので、whereLinq は SQL に変換できません。2 つの関数を削除するだけで、元のクエリが機能することを期待していますConvert.ToString()

2.「....これを行う最善の方法」:

まあ、より良い方法.... :)

Entity Framework では、関連するエンティティ間を移動する簡単な方法は、Navigation Propertiesを使用することです。アプローチが「データベース ファースト」の場合、これらは EDMX で生成する必要があります。あなたのアプローチが「Code First」である場合は、これを設定する方法を説明する良い投稿がここにあります。

いずれにせよ、私はあなたのClientクラスにナビゲーション プロパティがあることを期待していますAgent(つまりOrder、あなたが言及した MvcMusicStore サンプルの OrderDetail のプロパティに似ています):

public virtual Agents Agent { get; set; }

次に、メソッドは非常に単純になります (つまり、MvcMusicStore の多くのコントローラー メソッドに似ています) ...Joinsステートメントは不要、または複数必要:

var clients = db.MVCInternetApplicationPkg.Where(c => c.Agent.AgentLogin == User.Identity.Name); 
return View(clients.ToList()); 
于 2012-08-22T05:39:02.553 に答える
1

何が起こっているのかというと、Linq プロバイダー (Linq to Entities) がクエリを SQL に変換しようとしていますが、Convert のマッピングがありません。これらのエラーは解読が難しい場合がありますが、手がかりは "String.ToString()" 行にあります。また、実行が遅延されているため、エラーが繰り返されるまで表示されないことにも注意しclientItemsてください。toList()return View(clientItems.ToList());

于 2012-08-22T05:31:33.017 に答える
0

LINQ は Convert.ToInt32() を同等の T-SQL にマップできないため、例外がスローされます。COLD TOLD が言ったように、値を変換してから、変換された値をクエリで使用する必要があります。

確認してください: LINQ to Entities が特定のメソッドを認識しないのはなぜですか?

于 2012-08-22T05:36:40.493 に答える