2017-05-08 59 views
1

我对C#列表不太好,因为它对我非常困惑。所以,现在我加入了两个表到对方,看起来像这样:C#列表连接声明

var final = queryTable 
    .Join(skillTable, 
     query => query.Id_Skill, 
     skill => skill.Id, 
     (query, skill) => new { Id = query.Id, Name = query.Name, Line1 = skill.Line1, Line2 = skill.Line2, Line3 = skill.Line3, Line4 = skill.Line4, Line5 = skill.Line5 }) 
    .ToList(); 

所以你可以看到新的名单竟元素IdNameLine1Line2Line3Line4Line5

这个列表是什么类型? 我的意思是,我将如何声明列表而不是var?我需要这个进一步的目的。

像:

List<theType> final = new List<theType>(); 
final = ... 
+3

你可以尝试创建一个具有所有这些属性的类 –

+3

它只是创建了一个[匿名类型(https://docs.microsoft.com/ EN-US/DOTNET /用品/ CSHARP /编程引导/班,和结构/匿名类型)。如果你需要以后参考它,那么是的,路易斯罗克说。 –

+0

请不要在帖子中提供投票建议,它只是为志愿者编辑创建工作 - 谢谢! – halfer

回答

3

,如果你需要引用这个以后,你可以创建一个类,像这样

public class SomeName 
{ 
    int id { get; set; } 
    string Name { get; set; } 
    string Line1 { get; set; } 
    string Line2 { get; set; } 
    string Line3 { get; set; } 
    string Line4 { get; set; } 
} 

所有这些属性,改变你的查询来创建此类

var final = queryTable 
.Join(skillTable, 
    query => query.Id_Skill, 
    skill => skill.Id, 
    (query, skill) => new SomeName() { Id = query.Id, Name = query.Name, Line1 = skill.Line1, Line2 = skill.Line2, Line3 = skill.Line3, Line4 = skill.Line4, Line5 = skill.Line5 }) 
.ToList(); 
+0

'新SomeName()'?空对象列表将不会非常有用。 – crashmstr

+0

@crashmstr是忘了添加它,但萨米奇修复它 –

+1

你可以赋值给属性或创建参数化构造函数 – Samich

0

您正在创建使用new { }语法匿名类型。这意味着您只能使用var,除非您专门创建了具有相同字段的类。

2

的新实例从在anonymous types文档:(强调)

通常,当您使用匿名类型初始化变量时,可以使用var将该变量声明为隐式类型局部变量。 无法在变量声明中指定类型名称,因为只有编译器才能访问匿名类型的基础名称。有关var的更多信息,请参阅Implicitly Typed Local Variables

如果您希望在执行查询后重用该类型,最佳选择可能是为此目的创建一个类。

另一种解决方案是使用Tuple,它可以帮助您创建另一个类,但是如果您计划在太多位置引用类型,则很难使用它。只有在计划用相同方法进一步处理数据时,我才可能使用Tuple

(query, skill) => Tuple.Create(query.Id, query.Name, skill.Line1, skill.Line2, 
           skill.Line3, skill.Line4, skill.Line5 }); 

你会最终有一个List<Tuple<int, string, .... >