リストの最初の値と最後の値を取得しようとしています。クエリ演算子First()
はサポートされていますが、Last()
およびLastOrDefault()
はエラーを返します。 Last()
演算子を間違った方法で使用していますか?
var purchaseBills = db.PurchaseBills.OrderBy(p => p.BillID);
if (purchaseBills.Count() >0)
{
var firstBill= purchaseBills.First(); //This is supported
//Attempt 1
var lastBill = purchaseBills.Last(); // Not supported
//Attempt 2
var lastBill = purchaseBills.LastOrDefault(); //Not supported
//Attempt 3
var lastBill = purchaseBills.Reverse().First(); //Not supported
textBoxPurchaseBillFrom.Text = firstBill.BillNo.ToString();
textBoxPurchaseBillTo.Text = lastBill.BillNo.ToString();
}
更新:-エラー-
試行1:クエリ演算子 'Last'はサポートされていません。
試行2:クエリ演算子 'LastOrDefault'はサポートされていません。
試行3:クエリ演算子 'Reverse'はサポートされていません。
ToList()
またはToArray()
を呼び出してそれを独自のリストに入れる代わりに、AsEnumerable()
を使用することを好みます。OrderByDescending()
を試してください。Count()
の代わりにAny()
を使用します。orderByを
.OrderByDescending(p => p.BillID)
(そして最初に使用)またはあなたは次のようなことをします
purchaseBills.ToArray().Last()
これが高くない場合。
Last
は、バックエンドDBではサポートされていません。他のテクニックを試してください:
OrderByDescending
を使用してクエリを実行し、要求されたアイテムが最初に来るようにします。
通常どおりLINQクエリをコーディングしますが、Linq2Sqlを強制してCLRコレクションにレンダリングすると、Last
を含むローカルのすべてに自由にアクセスできます。例:
var bills = purchaseBills.ToList();
var last = bills.Last();
問題は、Last
またはReverse
のSQLへの簡単な翻訳がないため、メモリ内の何か(ToList
、ToArray
)に変換することです。レコードが多すぎることはありません。また、OrderByDescending
の代わりにOrderBy
を使用して2回目のクエリを実行し、First
を使用することもできます。
私はLastOrDefault()
を使用しないようにしています。いつか機能しないか、サポートされないからです。 id
をdesc
で並べ替えてから、最初のレコードを取得します。
.OrderByDescending(o=>o.id)
.FirstOrDefault(s => s.Name == Name)
Last
演算子が、対応するコマンドがないSQLサーバーに送信されようとしているという事実と関係があります。一度の解決策は、db呼び出しの最後にToArray()
またはTolist()
を配置することです。これにより、その1行がデータを取得するための明示的な呼び出しになります。行)。
さらに別の方法では、orderbydescendingなしで最後の要素を取得し、すべてのエンティティをロードします。
var lastBill = purchaseBills
.Where(f => f.BillID == purchaseBills.Max(f2 => f2.BillID))
.FirstOrDefault();