Q:

Dynamic GP: Read Line Items of Sales Invoice

From Web Service of Microsoft Dynamics GP 2013 Creating Sales Invoice by following code:
    private void CreateInvoice()
    {
        CompanyKey companyKey;
        Context context;
        SalesInvoice salesInvoice;
        SalesDocumentTypeKey salesInvoiceType;
        CustomerKey customerKey;
        BatchKey batchKey;
        SalesInvoiceLine salesInvoiceLine;
        ItemKey invoiceItem;
        Quantity invoiceCount;
        Policy salesInvoiceCreatePolicy;
        MoneyAmount unitPrice;

        DynamicsGPClient wsDynamicsGP = new DynamicsGPClient();
        context = new Context();
        companyKey = new CompanyKey();
        companyKey. Id = (-1);
        context. OrganizationKey = (OrganizationKey)companyKey;
        salesInvoice = new SalesInvoice();
        salesInvoice. Key = new SalesDocumentKey();
        salesInvoice. Key. Id = "XX555";
        salesInvoiceType = new SalesDocumentTypeKey();
        salesInvoiceType. Type = SalesDocumentType. Invoice;
        salesInvoice. DocumentTypeKey = salesInvoiceType;
        customerKey = new CustomerKey();
        customerKey. Id = "ADAMPARK0001";// "AARONFIT0001";
        salesInvoice. CustomerKey = customerKey;
        batchKey = new BatchKey();
        batchKey. Id = "SALES INVOICES";
        salesInvoice. BatchKey = batchKey;

        IList<SalesInvoiceLine> salesInvoiceLines = new List<SalesInvoiceLine>();
        string[] itemId = { "ACCS-HDS-1EAR", "32X IDE" };    //"ACCS-RST-DXBK";// "512 SDRAM";//              
        for (int i = 0; i < itemId. Count(); i++)
        {
            salesInvoiceLine = new SalesInvoiceLine();
            invoiceItem = new ItemKey();
            invoiceItem. Id = itemId[i];
            salesInvoiceLine. ItemKey = invoiceItem;
            unitPrice = new MoneyAmount();
            unitPrice. Currency = "USD";
            unitPrice. DecimalDigits = 2;
            unitPrice. Value = 1.00M;
            salesInvoiceLine. UnitPrice = unitPrice;
            invoiceCount = new Quantity();
            invoiceCount. Value = 1 + i;
            salesInvoiceLine. Quantity = invoiceCount;
            salesInvoiceLines. Add(salesInvoiceLine);
        }            
        SalesInvoiceLine[] invoiceLines = salesInvoiceLines. ToArray();
        salesInvoice. Lines = invoiceLines;
        salesInvoiceCreatePolicy = wsDynamicsGP.GetPolicyByOperation("CreateSalesInvoice", context);
        wsDynamicsGP.CreateSalesInvoice(salesInvoice, context, salesInvoiceCreatePolicy);
        if (wsDynamicsGP.State ! = CommunicationState. Faulted)
        {
            wsDynamicsGP.Close();               
        }
    }

Creating Sales Invoice Example is here 
Reading Sales Invoice by following code:
    private void ShowInvoice()
    {

        CompanyKey companyKey;
        Context context;
        LikeRestrictionOfstring salespersonIdRestriction;
        ListRestrictionOfNullableOfSalesTransactionState transactionStateRestriction;
        SalesInvoiceCriteria salesInvoiceCriteria;
        SalesInvoiceSummary[] salesInvoiceSummary;
        BetweenRestrictionOfNullableOfdateTime restriction;

        DynamicsGPClient wsDynamicsGP = new DynamicsGPClient();
        context = new Context();
        companyKey = new CompanyKey();
        companyKey. Id = (-1);
        context. OrganizationKey = (OrganizationKey)companyKey;
        salespersonIdRestriction = new LikeRestrictionOfstring();
        transactionStateRestriction = new ListRestrictionOfNullableOfSalesTransactionState();
        transactionStateRestriction. EqualValue = SalesTransactionState. Work;
        salesInvoiceCriteria = new SalesInvoiceCriteria();
        salesInvoiceCriteria. TransactionState = transactionStateRestriction;
        salesInvoiceCriteria. SalespersonId = salespersonIdRestriction;
        salesInvoiceSummary = wsDynamicsGP.GetSalesInvoiceList(salesInvoiceCriteria, context);

        StringBuilder summaryList = new StringBuilder();           
        foreach (SalesInvoiceSummary a in salesInvoiceSummary)
        {
           summaryList. AppendLine("<b>Invoice number:</b> " + a.Key. Id + "  <b>Invoice amount:</b> " + a.TotalAmount. Value. ToString("C"));
        }
        if (wsDynamicsGP.State ! = CommunicationState. Faulted)
        {
            wsDynamicsGP.Close();
        }
    }

Reading Sales Invoice Example is here
Question is: How to get Line Items of particular invoice? 

A:

You need to get the actual SalesInvoice object, which contains the associated line items.   You can do this using GetSalesInvoiceByKey() passing in the order number (SOPNUMBE) of the invoice. 
Extending your second example:
foreach (SalesInvoiceSummary a in salesInvoiceSummary)
{
    summaryList. AppendLine("<b>Invoice number:</b> " + a.Key. Id + "  <b>Invoice amount:</b> " + a.TotalAmount. Value. ToString("C"));

    SalesInvoice invoice = wsDynamicsGP.GetSalesInvoiceByKey(a. Key. Id, context);
    SalesInvoiceLine[] lineItems = invoice. Lines;
}

However, there's no requirement to call GetSalesInvoiceList() first -- you can call GetSalesInvoiceByKey() directly if you know the order number.