【问题标题】:Anonymous Method in Object initializer对象初始化器中的匿名方法
【发布时间】:2013-06-07 05:41:07
【问题描述】:

我正在创建一个包含以下课程的测验

Quiz 具有属性 CorrectOptionWrongOption1WrongOption2WrongOption3

在其DTO 我有List<String> Options 将包含所有错误和正确的选项。

在检索实体时,我正在使用 DTO 的对象初始化程序,但不知道如何分配 List<String> Options

我记得我们使用匿名方法来做到这一点。

     select new QuestionDTO
                {
                    Category = q.QuizCategory.Text
                    ,
                    CorrectOption = q.CorrectOption
                    ,
                    DifficultyLevel = q.DifficultyLevel.Text
                    ,
                    Points = q.DifficultyLevel.Points.Value
                    ,
                    RewardPCT = q.DifficultyLevel.RewardPCT.Value
                    ,
                    Text = q.Text
                    ,
                    TimerDuration = q.DifficultyLevel.TimerDuration.Value
                    ,
                    Options = (qz) =>
                        {
                            List<string> ops = new List<string>();

                            ops.Add(q.CorrectOption);
                            ops.Add(q.WrongOption1);
                            ops.Add(q.WrongOption2);
                            ops.Add(q.WrongOption3);

                            return new List<string>().Shuffle();
                        }
                };

但它给出了以下错误。

无法将 lambda 表达式转换为类型“System.Collections.Generic.List”,因为它不是委托类型。

更新

例如,我在原始实体类上创建了一个只读属性来完成这项工作。但请让我知道更好的方法。 谢谢

更新2

但它不起作用:p 在 WCFTestClient.exe 上说以下内容

LINQ 不支持指定的类型成员“选项” 实体。只有初始化器、实体成员和实体导航 支持属性。

【问题讨论】:

  • 请注意:你在用ops 做什么。看起来您填充它只是为了丢弃它。

标签: c# linq lambda anonymous-methods


【解决方案1】:

遇到了类似的问题。我可以通过在查询上调用 ToList() 然后对 Select new {... }

进行单独查询来解决它

【讨论】:

    猜你喜欢
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多