0

こんにちは私はレンタカーのWebサービスを作成していますが、各タスクを互いに分離しておく必要があります。そこで、一般的な名、姓、年齢などの顧客向けのサービスを作成しました。また、採用日と採用日数を計算するために使用する採用日サービスも作成しました。費用)。

私の問題は、以下の(そして最終的には車)にリンクしようとしていることです 。これは、コンソールアプリを使用してこれらのさまざまなサービスをホストして練習するだけのセットアップの例です。IHireDatesICustomers

ここに画像の説明を入力してください

以下は、IHireDateを顧客にリンクしようとしているICustomersおよびIHireDateサービスですが、その方法がわかりません。

ICustomer(サーバー側)

namespace WcfServiceLibrary3
{
    #region Customer DataContract
    [DataContract(Name = "Customers")]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    [Serializable]
    public class Customers : ICustomers
    {

            [DataMember(Name = "CustomerID")]
            public string CustomerID { get; set; }
            [DataMember(Name = "FirstName")]
            public string FirstName { get; set; }
            [DataMember(Name = "LastName")]
            public string LastName { get; set; }
            [DataMember(Name = "Age")]
            public string Age { get; set; }

IHireDates(サーバー側):

namespace WcfServiceLibrary3
{
    #region HireDate DataContract
    [DataContract(Name = "HireDate")]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    [Serializable]
    public class HireDate : IHireDate
    {
    [DataMember(Name = "HireFromDate")]
    public string HireFromDate { get; set; }
    [DataMember(Name = "HireToDate")]
    public string HireToDate { get; set; }
    [DataMember(Name = "NumberOfDaysToHire")]
    public string NumberOfDaysToHire { get; set; }

    #endregion

        #region Lists
        List<HireDate> HireDates = new List<HireDate>();
        #endregion

        public void ICustomers.AddCustomerHireDates(string hirefromdate, string hiretodate, string customerID, string firstname, string lastname)
        {
            // not sure this will work
            var result = ICustomers.Where(n => String.Equals(n.CustomerID, customerID)).FirstOrDefault();
            if (result != null)
            {
                result.HireDates.Add(new ICustomers() { CustomerID = customerID, FirstName = firstname, LastName = lastname });
            }
        }

たとえば、これが正しいかどうかわからず、顧客にはどこの定義がないICustomers.AddCustomerHireDatesと言っています。ICustomers.Where誰かが私を助けることができれば、このクロスLINQサービスをどのように行うのか本当にわかりません。私は非常に感謝しています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.InteropServices;
using System.ServiceModel;

namespace WcfServiceLibrary3
{
    #region Customer DataContract
    [DataContract(Name = "Customers")]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    [Serializable]
    public class Customers : ICustomers
    {

            [DataMember(Name = "CustomerID")]
            public string CustomerID { get; set; }
            [DataMember(Name = "FirstName")]
            public string FirstName { get; set; }
            [DataMember(Name = "LastName")]
            public string LastName { get; set; }
            [DataMember(Name = "Age")]
            public string Age { get; set; }

    #endregion

            #region Lists
            List<Customers> customermembers = new List<Customers>();
            int eCount = 0;
            #endregion

            public void AddCustomer(Customers customer)
            {
                customer.CustomerID = (++eCount).ToString();
                customermembers.Add(customer);
                //BinaryFormatter f = new BinaryFormatter();
                //Stream w = new FileStream("c:\\list.dat", FileMode.Append);
                //f.Serialize(w, staff);
                //w.Close();
            }
            public void RemoveCustomer(string customerID)
            {
                customermembers.RemoveAll(s => s.CustomerID == customerID);
            }
            public List<Customers> GetCustomerCollection()
            {
                return customermembers;
            }
            public void UpdateCustomer(string customerID, Customers customer)
            {
                var findCustomerMember = customermembers.Where(s => s.CustomerID == customerID).FirstOrDefault();

                if (findCustomerMember != null)
                {
                    findCustomerMember.CustomerID = customer.CustomerID;
                    findCustomerMember.FirstName = customer.FirstName;
                    findCustomerMember.LastName = customer.LastName;
                    //findStaffMember.TimeAdded = staff.TimeAdded;
                    //BinaryFormatter f = new BinaryFormatter();
                    //Stream w = new FileStream("c:\\updatelist.dat", FileMode.Append);
                    //f.Serialize(w, staff);
                    //w.Close();
                }

            }
            public List<Customers> GetCustomer(string anything)
            {


                List<Customers> customers = customermembers.Where(n =>
                                               string.Equals(n.CustomerID, anything, StringComparison.CurrentCultureIgnoreCase)
                                               || string.Equals(n.FirstName, anything, StringComparison.CurrentCultureIgnoreCase)
                                               || string.Equals(n.LastName, anything, StringComparison.CurrentCultureIgnoreCase)
                                               || string.Equals(n.Age, anything, StringComparison.CurrentCultureIgnoreCase)
                                           ).ToList();
                return customers;
            }
        }
    }
4

2 に答える 2

0

独自の LINQ プロバイダーを作成する場合を除き、LINQ to Objects を使用する必要があります。これは、両方のサービスから結果をロードし、結合を実行する必要があることを意味します。

私はこれが良い考えだとは本当に思いませんし、その道をたどることは問題をはらんでいると思います。

別の方法は、独自の種類の rdbms (およびおそらくそれをラップする LINQ プロバイダー) を作成することです。お勧めしない別のルート。

他の 2 つのサービスのデータを提供する3 つ目のサービスを用意して、すべてのデータを 1 か所に集めて、真に結合できるようにすることができると思います。

于 2012-07-25T02:19:37.260 に答える
0
        public Customer GetCustomerByHireDates(string hirefromdate, string hiretodate)
    {
        var customerID = HireDates.Where(h => h.HireFromDate == hirefromdate && h.HireToDate == hiretodate).Select(sl=>sl.CustomerID).FirstOrDefault();
        Customers customer = null;
        var customers = new Customers().GetCustomerCollection();
        if (customers != null)
        {
            customer = customers.Where(c=>c.CustomerID==customerID).FirstOrDefault();

        }
        return customer;  
    }

HireDate クラスの HireDates リストには HireDates が含まれており、HireDate クラスには HireFromDate と HireToDate と CustomerID のプロパティがあると思います

于 2012-07-25T02:26:20.617 に答える