1

我有下面的一段代码,它是从列表中选择的,在里面选择它实例化其他列表并将获取的数据复制到其中。

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

                            });

我需要修改此代码(由于 Lambda 技能有限,我无法修改),以便var rep在选择之前对其进行实例化。就像是:

 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>(或者可能是 IQuerable)这是 ReportRecords 的集合,在您尝试从中提取值之前不会填充它。例如通过调用 First()、ToList()、Sum()。

您还可以执行其他操作,例如过滤,直到使用 .Where() 在列表下方才会运行,直到您调用 First() 或类似的东西才会实际调用,例如,

//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 回答