1

リストから選択している以下のコードがあり、選択内で他のリストをインスタンス化し、ナッチされたデータをそれにコピーします。

var rep = Histories.Select(rec => new ReportRecord()
                            {
                                Name = rec.ProductName,
                                Total = rec.AdvanceTotal,
                                BidTotal = rec.LiveTotal

                            });

このコードを変更する必要があります (Lambda のスキルが限られているためできません) ので、var repselect の前にインスタンス化する必要があります。何かのようなもの:

 var rep = new ReportRecord();
 Histories.Select(c => rep.ProductName=c.Name,
 rep.Total=c.AdvanceTotal,
 rep.BidTotal=rec.LiveTotal);

正しい構文を教えてください。

私は本当にあなたの助けと指導に感謝します.

ありがとう

4

2 に答える 2

1

あなたの質問はかなり不明確です。もう少し明確にしていただければ、ご質問により適切にお答えできるようになります。

ただし、あなたが望んでいるのは、ReportRecordからのデータが取り込まれた単一のインスタンスですHistories

var rep = Histories.Select(rec => new ReportRecord()
                            {
                                ProductName = rec.Name,
                                Total = rec.AdvanceTotal,
                                BidTotal = rec.LiveTotal

                            }).First();

これにより、 から最初のレコードが取得され、その行の値でHistories新しいレコードが入力されます。ReportRecord

varプレースホルダ型です。それは何でもかまいません。コンパイラは、それがどうあるべきかを解決します。ただし、それが何であるかを知っている場合は、タイプを指定すると、個人的にはより明確になります。このような:

ReportRecord rep = Histories.Select(rec => new ReportRecord()
                            {
                                ProductName = rec.Name,
                                Total = rec.AdvanceTotal,
                                BidTotal = rec.LiveTotal

                            }).First();

私が与えた解決策はHistories、最後の行が必要な場合は最初の行を提供し、次の行に置き換え.First();ます.Last();

詳細情報:

元のコード サンプルIEnumerable<ReportRecord>では、​​ReportRecords のコレクションである (またはおそらく IQuerable) を取得します。これは、そこから値を抽出しようとするまでは取り込まれません。たとえば、First()、ToList()、Sum() を呼び出します。

First() またはそのようなものを呼び出すまで実際には呼び出されない . Where() を使用してリストを下るまで実行されないフィルタリングなど、実行できる他の操作もあります。

//Get the first record from Histories where the product name is "Magic beans" and populate a new ReportRecord with those values
ReportRecord rep = Histories.Select(rec => new ReportRecord()
                            {
                                ProductName = rec.Name,
                                Total = rec.AdvanceTotal,
                                BidTotal = rec.LiveTotal

                            }).Where(w => w.Name == "magic beans")
                              .First();

他の LINQ 拡張メソッドの例をいくつか示しますhttp://www.nilzorblog.com/2013/05/101-linq-samples-lambda-style.html

于 2013-10-30T03:35:57.120 に答える
0

Select()呼び出しているメソッドはIEnumerable<ReportRecord>、単一の値ではなく、おそらくを返します。回避策では、単一の値を使用しています。これはあなたを混乱させるかもしれません。

于 2013-10-30T01:04:49.957 に答える