【问题标题】:cast from List<EntityObject> to EntityObject从 List<EntityObject> 转换为 EntityObject
【发布时间】:2011-10-07 09:48:44
【问题描述】:

我的代码如下。

public void CreateNewAuthor(List<Author> newAuthor)
{
    publishContext.AddToAuthors(newAuthor);
}

我知道这会导致错误,因为 AddToAuthors(Author newAuthor) 在传递 List 时接受实体对象作为参数。那么这应该如何处理呢?如何在 AddToAuthors() 之前将 List 转换为实体对象?

【问题讨论】:

  • A List 顾名思义就是对象的“列表”。那么您想如何将例如 10 个作者的列表转换为 1 个作者?
  • 也许你应该把你的变量重命名为newAuthors

标签: c# entity-framework


【解决方案1】:

您正在接受 多个 作者 - 但您正在尝试调用需要 单个 作者的东西。您希望列表中有多个值,还是只有一个?

听起来你可能只是想循环:

public void CreateNewAuthor(List<Author> newAuthors)
{
    foreach (Author newAuthor in newAuthors)
    {
        publishContext.AddToAuthors(newAuthor);
    }
}

...或者完全有可能上下文已经提供了一次添加多个作者的方法。 (我不是 EF 的人,所以我不确定。)

重要的是您了解这里的可能性 - 列表可能不包含作者、一位作者或多位作者。所有这些在您的代码中都有效吗?你想如何处理这些情况?

【讨论】:

  • 谢谢...乔恩。我明白我正在犯的错误。你是对的。
【解决方案2】:

您可以遍历列表并添加此列表包含的所有作者对象:

foreach (Author author in newAuthor)
{
    publishContext.AddToAuthors(author);
}

【讨论】:

    【解决方案3】:

    案例 1。您知道列表只包含一项:

    1. 将方法的签名更改为以下内容:

      public void CreateNewAuthor(Author newAuthor)
      

      (引用名称不是复数形式的项目列表非常不直观。更不直观的是,您的方法接受(即“几个”)Author 对象的列表,然而要求列表只包含一项。)

    2. 然后,如下调用你的方法:

      // using System.Linq;
      // List<Author> someListOfAuthors = new List<Author> { someAuthor };
      CreateNewAuthor( someListOfAuthors.Single() );
      

      或者,不使用 LINQ:

      CreateNewAuthor( someListOfAuthors[0] );
      

    案例 2。列表可能包含任意数量的项目:

    1. 将参数从newAuthor重命名为newAuthors,原因同上。

    2. 把你的方法体改成这样:

      foreach (Author author in newAuthors)
      {
          publishContext.AddToAuthors(author);
      }
      

    【讨论】:

      猜你喜欢
      • 2012-02-07
      • 2016-07-15
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多