2

Customerオブジェクトがあります。Customerオブジェクトには、複数のAddressオブジェクトが含まれる場合があります。

GetCityたとえば、Customerオブジェクトにメソッドを設定したいと思います。

現在、各AddressオブジェクトにはaddressIdがあるため、linqを介してプロパティをクエリしようとしています。

以下は私のコードです(私はこの問題のためにそれを切り詰めました)

Customerオブジェクト...

public class Customer
{
    private string _customerNo;
    private List<CustomerAddress> _addresses = new List<CustomerAddress>();
    //other members immitted from this sample


    //constructor code, immitted from this sample

    public List<CustomerAddress> Addresses
    {
        get { return _addresses; }
    }
    //other properties immitted from this sample    

    public string GetCity(string id)
    {
        var city = (from a in _addresses
                        where a.AddressID == id
                        select a.City).Single();

        return city;
    }   
}

the Address Object...
public class CustomerAddress
{
    private string _addressid;
    private string _city;
    //other members immitted from this sample

    public CustomerAddress(string strAddressID, string strAddressLister, string strAddress1, string strAddress2, string strAddress3, string strCity, string strState, string strPostCode, string strCountry,
        bool booDefaultAddress, string strDeliveryAddress, string strInvoiceAddress, string strPayAddress, string strVisitAddress, string strDeliveryTerms, string strShipVia, string strRouteId)
    {
        _addressid = strAddressID;
        _addresslister = strAddressLister;
        _address1 = strAddress1;
        _address2 = strAddress2;
        _address3 = strAddress3;
        _city = strCity;
        _state = strState;
        _postcode = strPostCode;
        _country = strCountry;
        _defaultaddress = booDefaultAddress;
        _deliveryaddress = strDeliveryAddress;
        _invoiceaddress = strInvoiceAddress;
        _payaddress = strPayAddress;
        _visitaddress = strVisitAddress;
        _deliveryterms = strDeliveryTerms;
        _shipvia = strShipVia;
        _routeid = strRouteId;
    }

    ////////////////////////////
    //CustomerAddress Properties
    ////////////////////////////
    public string AddressID
    {
        get { return _addressid; }
    }    
    public string City
    {
        get { return _city; }
    }
    //other properties immitted from this sample
}

GetCity(id)Customerオブジェクトでメソッドを実行すると、エラーが発生します。

System.InvalidOperationException:シーケンスに要素が含まれていません

linqクエリで次のコードも試しましたが、同じ結果が得られました。

public string GetCity(string id)
{
    var city = (from a in this.Addresses
                    where a.AddressID == id
                    select a.City).Single();

    return city;
}

と...

public string GetCity(string id)
    {
        var city = (from a in this._addresses
                        where a.AddressID == id
                        select a.City).Single();

        return city;
    }

CustomerオブジェクトにAddressオブジェクトが含まれていることは知っていますが、メソッドを機能させる方法がわかりませんGetCity

どんな助けでもいただければ幸いです。重要な情報を見逃した場合はお知らせください。

4

3 に答える 3

4

ここでの問題は、_addressesコレクションに要素がまったく含まれていないかAddressID _addressesコレクションにidと等しい要素が含まれていないことです(おそらくより可能性が高いです)。

Single()指定された基準に一致するアイテムが1(0)未満または複数ある場合、例外がスローされるのはどのように機能しますか。null一致するものがないときに単に戻りたい場合は、を使用しますSingleOrDefault()

于 2013-03-06T15:05:36.617 に答える
3
where a.AddressID == id

すべてのアドレスを除外しているためSingle、空の列挙を呼び出すとエラーメッセージが表示されます。

に切り替えることもできSingleますSingleOrDefaultが、主な問題は住所の比較にあると思います

于 2013-03-06T15:06:09.683 に答える
1

linqクエリは、リストに入力するアイテムを返さないようです。要求されたIDが存在することを確認しますか?

シングルには、正確に1つのアイテムを含むIEnumerableが必要です

于 2013-03-06T15:05:16.170 に答える