1

这应该很简单,但由于某些未知原因,它对我来说是错误的。

数据库包含字符串 SubjectId、bool QReport、int Q、int FY、List ANotes、int Id。Id 是关键列,因此不会被检索。

我从数据库表中获取数据,例如

var unotesxx = db.UNotesDB.First(X => x.SubjectId == model.SubjectId);

这将获取数据。然后我把它放到一个对象列表中。

List<UNotesDB> UNotes = new List<UNotes>();
Unotes.Add(unotesxx);

这很好用。我有两个使用相同内容的对象和列表。不同之处在于包含的数据。现在我想将两者组合成一个列表。

List<TNotesDB> TNotes = new List<TNotes>();

这个设置与其他两个完全相同。然后我尝试了

List<UNotesDB> UNotes = new List<UNotes>();
List<CNotesDB> CNotes = new List<CNotes>();
List<TNotesDB> TNotes = new List<TNotes>();
var unotesxx = db.UNotesDB.First(X => x.SubjectId == model.SubjectId);
var cnotesxx = db.UNotesDB.First(X => x.SubjectId == model.SubjectId);
UNotes.Add(unotesxx);
CNotes.Add(cnotesxx);

这一切都有效,符合要求,当我运行调试时,一切看起来都很棒。

现在我想将前两个合并到第三个中。所以我添加了接下来的两个声明。

TNotes.Add(unotesxx);
TNotes.Add(cnotesxx);

这些最终在红色下划线。

所以我尝试了

for ( int i = 0; i < UNotes.Count; i++)
{
    TNotes.Add(UNotes[i]);
}

ADD 部分再次用红色下划线。我知道这不起作用有一个简单的原因,但由于某种原因,我无法只见树木不见森林。哈哈

4

1 回答 1

0

泛型 List 是强类型的。您不能将 UNotesDB 添加到List<TNotesDB>.

选项:

  1. 为所有三个创建一个通用的“容器”类,并将各种类型加载到该容器对象中,然后加载到列表中

    public class Note {
       public int SubjectID {get;set;}
       public string Name {get;set;}
    }
    
    //get UNOTE logic here...
    // then add unote to List. Repeat for other types.
    
    var note = new Note() {
       SubjectID = unote.SubjectID,
       Name = unote.Name,
    };
    
    noteList.Add(note);
    
  2. 为所有类型创建一个接口,然后创建该接口的列表

  3. 为所有类型创建一个基本类型,然后创建该基本类型的列表。

假设您的数据库类型是由 LINQ To SQL 或实体框架生成的,第一个选项可能是您最简单的方法。

于 2012-10-08T14:37:59.987 回答