2

需要将此 sql 查询转换为 LINQ

SELECT *
FROM 
    parcels p
    LEFT JOIN leases l ON p.parcels_pk = l.parcels_fk
WHERE 
    l.parcels_fk IS NULL 
    AND p.parcels_pk NOT IN (SELECT parcels_fk FROM application_parcels)
ORDER BY parcel

试过这个:

var qry = from p in db.Parcels
          join l in db.Leases on p.Id equals l.pk_parcel
          where l.pk_parcel == null 
                && !(from ap in db.ApplicationParcels 
                     select ap.ParcelId).Contains(p.Id)
                     orderby p.Name
4

1 回答 1

3
             // SELECT * FROM parcels
var result = from p in parcels
             // LEFT JOIN leases ON p.parcels_pk = l.parcels_fk
             join llj in leases on p.parcels_pk equals llj.parcels_fk into lj
             from l in lj.DefaultIfEmpty()
             // WHERE l.parcels_fk IS NULL
             where l.parcels_fk == null
             // AND p.parcels_pk NOT IN (...)
               && !application_parcels.Any(x => x.parcels_fk == p.parcels_pk)
             // ORDER BY [p.]parcel
             order by p.parcel
             select new { parcel = p, lease = l };

假设我的架构是正确的。

但在未来:

  • 首先提供你尝试过的东西(表现出努力)。
  • 看看 LINQPad,它很有帮助。
于 2013-10-09T20:34:39.900 回答