3

Customer テーブルと Address テーブル (customer_id、address_forename、address_surname、address_street、address_city、address_zip、address_storedtime) があり、customer_id は外部キーです。

1 人の顧客が複数のアドレスを持つことができます。

今、次のようにLINQを使用して最後に入力されたアドレスのみを取得しようとしています。これにより、アドレスを文字列に入れて返すことができます:コード:

var customerAddress = (from c in myDB.address
                       where (c.customer_id == customerId)
                       select new
                       {
                           c.customer_id,
                           c.address_forename,
                           c.address_surname,
                           c.address_street,
                           c.address_city,
                           c.address_zip,
                           c.address_storedtime
                       }).GroupBy(g => new
                       {
                           Customer = .customer_id,
                           Address = g.address_forename + " " + g.address_surname + " " + g.address_street + " " +        g.address_city + " " + g.address_zip 
                       }).Select(g => new
                       {
                           g.Key.Customer,
                           g.Key.Address,   
                           StoredTime = g.Max(x => x.address_storedtime)
                       }).Disinct();/*First();*/

string result = "";

foreach (var ad in customerAddress)
{
    if (ad.Address != null)
    {
        result = ad.Address;
    }
    break;
}

return result;

1 つだけを取得しようとしているのに、DB for the Customer の異なるアドレスに対して同じアドレス文字列を取得しています。

4

2 に答える 2

2

すでに顧客IDでフィルタリングしているため、グループ化句は必要ありません。降順の顧客の結果を注文するだけで、はるかに簡単に住所を予測できるはずです。

var customerAddress = (from c in myDB.address
                        where (c.customer_id == customerId)
                        orderby c.address_storedtime descending
                        select c.address_forename + " " + c.address_surname + " " + c.address_street + " " +        c.address_city + " " + c.address_zip)
                      .FirstOrDefault();
于 2012-10-05T13:29:50.803 に答える
0

foreachに置き換えます

var result =
    customerAdress.Any(ad => ad.Address != null) 
    ? customerAdress.Last(ad => ad.Address != null).Address
    : default(string);
于 2012-10-05T11:19:35.620 に答える