C#列表连接声明

时间:2017-05-08 17:41:59

标签: c# list

我对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 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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, .... >

答案 2 :(得分:0)

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