2013-03-27 7 views
11
Context db = new Context(); 
List<Invoice> invoice = 
(from LocalInvoice in db.Invoices 
where LocalInvoice.Site_Id == this.SiteIdentifier 
select LocalInvoice).ToList(); 

レコードのリストを返します。私はリストの最後を選択したい。 私は.ToList().LastOrDefault(); を試しましたが、エラーが発生したため、 '請求書'を 'System.Collections.Generic.List'に変換できません。LINQリストの最後に取得

は、なぜそれが、これは私がリストList<Invoice> invoice

として請求書に感謝すべてのヘルプと宣言していないと言っています。 のTa


私はあなたのすべてをお勧めしているものを試してみた返信みんなとエラーを取得するたびイム用 感謝EDIT:クエリ演算子は「LastOrDefault」はサポートされていません。

私は実際に問題を引き起こしている可能性がある全体的なことを説明していません。 私はすべての請求書を含むテーブルを持っていて、それぞれ別々の 'id'を持っています。ただし、各レコードには、異なる請求書に対して複数回使用されるSiteIdentifier列があります。 各サイトに複数の請求書がある可能性があります。

最新の請求書を取得しようとしています。 だから私は75

を請求書IDをbeeingているだろう、最新のレコードを取得、その後、SiteIdentifier == this.SiteIdentifier(eg25)すべてのレコードを取得しようとした請求書

id SiteIdentifier 
73 25 
74 25 
75 25 

言います誰にでもアイデアはありますか? もう一度、すべてのお手伝いをお願いいたします

答えて

23

LastOrDefaultは、単一の要素を返します。最初にフィルターを適用せずにToListを呼び出すべきではありません。必要なときにデータベースからすべての行を取得します。

var invoice = db.Invoices.LastOrDefault(s => s.Site_Id == this.SiteIdentifier); 

また、リレーショナル表を照会する場合は、順序を適用する必要があります。 LastOrDefaultは、メモリ内のコレクションでのみ意味があります。 EFでサポートされていないようで、例外がスローされます。単一の要素ではなく、Listを返します

var invoice = db.Invoices.OrderByDescending(s => s.Id) 
         .FirstOrDefault(s => s.Site_Id == this.SiteIdentifier); 
+0

感謝を参照してください編集 – John

+0

@ジョンを参照してください。私の第二の例をお読みください。それは動作するはずです。 –

+0

2番目の例は機能しますが、最初またはデフォルトの場合にのみ動作します。私は具体的にDBに最新のレコードが必要です。 。lastはエラーをスローするクエリ演算子 'Last'はサポートされていません。lastordefaultは元の投稿の元のエラーと同じです。アイデアはありますか? – John

5

LastOrDefaultはコレクションではなく請求書のインスタンスを返しますので、変数タイプを変更してください。

まだ
Invoice invoice = 
    (from LocalInvoice in db.Invoices 
    where LocalInvoice.Site_Id == this.SiteIdentifier 
    select LocalInvoice).LastOrDefault(); 

やクリーナー:

var invoice = db.Invoices.LastOrDefault(i => i.Site_Id == this.SiteIdentifier); 
+0

おかげで返信の編集 – John

0

LastOrDefault

最善の解決策は、順序が逆と方法をFirstOrDefault使用することです。これは動作します:返信用

Invoice invoice = 
    (from LocalInvoice in db.Invoices 
    where LocalInvoice.Site_Id == this.SiteIdentifier 
    select LocalInvoice) 
    .LastOrDefault(); 
+0

本当に非効率的!すべてのレコードをデータベースに照会し、データベース側ではなくアプリケーションで最後に取得します。 – MarcinJuraszek

+0

返信ありがとうございます。編集を参照してください – John

関連する問題