将两个或多个对象列表组合在一起

时间:2012-10-08 13:58:55

标签: c# c#-4.0 c#-3.0

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

数据库包含字符串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。

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);

这一切都有效,遵守,当我运行Debug时,一切看起来都很棒。

现在我想将前两个结合到第三个中。所以我添加了下两个状态。

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

最终在RED中强调了这一点。

所以我试过

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

再次,ADD部分用红色加下划线。 我知道有一个简单的原因,这不起作用,但由于某种原因,我看不到 森林里的树木。 LOL

1 个答案:

答案 0 :(得分:0)

通用列表是强类型的。您无法将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. 为所有类型创建基本类型,然后创建该基本类型的列表。
  4. 假设您的数据库类型是由LINQ To SQL或实体框架生成的,第一个选项可能是您最简单的方法。