私は請求書を持っており、トラックと呼ばれる項目を含めることができます。 InvoiceLineは、2つを接続するジャンクション・テーブルです。請求書に少なくとも1つのトラックが含まれている場合は、すべて正常に動作します。私が達成したいのは、トラックが含まれていなくても請求書を返すことです。請求書に商品が含まれていない場合、Linqはnullを返します
私の最初のコード:
var screenset =
from inv in context.Invoices where inv.InvoiceId == invoiceID
join line in context.InvoiceLines on inv.InvoiceId equals line.InvoiceId
join track in context.Tracks on line.TrackId equals track.TrackId
select new InvoiceAndItemsDTO
{
InvoiceId = inv.InvoiceId,
InvoiceDate = inv.InvoiceDate,
InvoiceTotal = inv.Total,
CustomerId = inv.CustomerId,
CustomerFullName = inv.Customer.LastName + ", " + inv.Customer.FirstName,
CustomerPhoneNumber = inv.Customer.Phone,
InvoiceLineId = line.InvoiceLineId,
TrackId = track.TrackId,
TrackName = track.Name,
TrackPrice = track.UnitPrice,
Artist = track.Album.Artist.Name,
UnitPrice = line.UnitPrice,
Quantity = line.Quantity,
Action = "None"
};
は、上記の請求書を返し、それが任意のトラックが含まれている場合、正しく追跡します。
基本的に上記のコードは、内側に何トラックが存在しない場合、結果セットが空になりそう参加あります。そこで、トラックがない場合でも請求書を含めるようにコードを修正しました。
var screenset =
from inv in context.Invoices where inv.InvoiceId == invoiceID
from j in context.Invoices where j.InvoiceId == invoiceID
join line in context.InvoiceLines on j.InvoiceId equals line.InvoiceId
join track in context.Tracks on line.TrackId equals track.TrackId
select new InvoiceAndItemsDTO
{
InvoiceId = inv.InvoiceId,
InvoiceDate = inv.InvoiceDate,
InvoiceTotal = inv.Total,
CustomerId = inv.CustomerId,
CustomerFullName = inv.Customer.LastName + ", " + inv.Customer.FirstName,
CustomerPhoneNumber = inv.Customer.Phone,
InvoiceLineId = line.InvoiceLineId,
TrackId = track.TrackId,
TrackName = track.Name,
TrackPrice = track.UnitPrice,
Artist = track.Album.Artist.Name,
UnitPrice = line.UnitPrice,
Quantity = line.Quantity,
Action = "None"
};
しかし、私は空の結果を得る:
を私はjoin into newset
を使用してfrom e in newset.DefaultIfEmpty()
を使用してみましたが、私は3つのテーブルを結合していますし、join into
は、最後のテーブルを作成し、すべての結合されたテーブルを含めることはできません。
私はこれに関する助けに感謝します。
ありがとうございます。
InvoiceLinesクラスに 'Track'ナビゲーションプロパティが定義されていますか? – CodeNotFound
「Left Join」のようなサウンドhttps://msdn.microsoft.com/tr-tr/vstudio/ee908647.aspx#leftouterjoin – uTeisT
@CodeNotFound、はい私はInvoiceLinesのトラックナビゲーションプロパティを持っています – superfly71