1

私はこのSQLクエリを持っています

select at.description, 
       a.Address1, 
       a.Address2, 
       a.City
  from address_types at
  left join Address a
    on a.addresstype = at.addresstype
    and a.addressid=24

Linq Lambda Expressionで書きたいですか、手がかりはありますか?

ありがとう!

4

2 に答える 2

0

あなたはこのようなことを試すことができます:

  var resultset = (from at in addresstypes
                   join a in addresses
                    on at.AddressType equals a.AddressType into joinaddress
                   from ja in joinaddress.DefaultIfEmpty()
                   where (ja != null && ja.AddressID == 24)
                   select new 
                     {
                        AddressType = at.AddressType,
                        AddressID = ja == null ? 0 : ja.AddressID,
                        Address1 = ja== null ? string.Empty : ja.Address1
                      });
于 2012-07-13T10:14:19.230 に答える
0

私はむしろそれを次のように単純化したいと思います

(from at in address_types
join a in address 
on at.addresstype  equals a.addresstype  into tt
from ar in tt.DefaultIfEmpty()
where (ar != null && ar.addressid == 24)
select new 
 {
    at.Description,
    ar.Address1, 
    ar.Address2, 
    ar.City 
  })

このチェック「(ja == null)」が必要ない理由は、この行のセットを「where(ar!= null && ar.addressid == 24)」にすでに制限しているためです。

このクエリは機能しますが、私のPOVは、SQLクエリではLEFTJOINも冗長であるということです。条件「a.addressid=24」のためにNULL行を取得しないため、SQLをINNERJOINおよびLINQクエリに書き換えることもできます。

(from at in address_types
    join a in address 
    on at.addresstype  equals a.addresstype
    where at.addressid == 24
    select new 
     {
        at.Description,
        a.Address1, 
        a.Address2, 
        a.City  
      })
于 2012-07-13T13:10:44.230 に答える