0

WCFを使用してエンティティフレームワークからこれをクエリし、電話クライアント側でデータを使用したいのですが、WCF関数から複数のデータ型をクエリする方法を知っていますか?

[OperationContract]
string LoginUser(string email, string password);

IService.cs

        public string LoginUser(string email, string password)
    {
        string query = @"SELECT VALUE tblUser FROM MyEntities.tblUsers AS tblUser WHERE tblUser.email = @email AND tblUser.password = @password";
        ObjectParameter[] parameters = new ObjectParameter[2];
        parameters[0] = new ObjectParameter("email", email);
        parameters[1] = new ObjectParameter("password", password);

        using (var context = new SteamKingEntities())
        {
            ObjectQuery<string> results = context.CreateQuery<string>(query, parameters);
            foreach (string result in results)
            {
                if (result != null)
                {
                    return result;
                }
            }
        }
        return null;
    }

IService.svc.cs

        public Login()
    {
        InitializeComponent();
        _serviceClient = new Service1Client();
        _serviceClient.LoginUserCompleted += new EventHandler<LoginUserCompletedEventArgs>(_serviceClient_LoginUserCompleted);

    }

    private void loginBtn_Click(object sender, RoutedEventArgs e)
    {
        _serviceClient.LoginUserAsync(txtEmail.Text, txtPassword.Password);
    }

    private void _serviceClient_LoginUserCompleted(object sender, LoginUserCompletedEventArgs e)
    {

        if (e.Error == null && e.Result != null)
        {
            MessageBox.Show("Welcome " + e.Result + "!");
        }
        else
        {
            MessageBox.Show(e.Error.Message + " Couldn't Login, Please try again =D");
        }
    }

Login.xaml.cs

Entity Frameworkからテーブル全体を返し、WindowPhone側で1つずつ処理できるようにします。

IService側にいくつかの変更を加える必要があると思いますが、電話開発に不慣れで、Linq to SQLに慣れているため、どうすればよいか真剣にわかりません。返品用のタイプのようなものの作り方を教えてください。ありがとうございました。

アップデート

私が得るエラーThere was an error while trying to deserialize parameter http://tempuri.org/:LoginUserResult. Please see InnerException for more details.

コードをWCFカスタムオブジェクトに記載されている方法に変更しましたが、逆シリアル化できませんでした...問題はWP部分にあると思いますが、結果を逆シリアル化するにはどうすればよいですか?

4

2 に答える 2

1

データ コントラクトを使用する必要があります。

[DataContract]
    public class ReturnType
    {
        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public string Pass { get; set; }
    }

サービスでは、次のようになります。

[OperationContract]
    Entities.ReturnType[] SelectTopUser(int countOfTop);

戻り値の型は、エンティティ フレームワークの型にすることができます

于 2012-05-12T14:19:16.737 に答える
1

refを使用するか、custom-objectsを使用できます

于 2012-05-12T14:20:43.373 に答える