C# 列表连接声明
C# list join declaration
我不擅长 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();
如您所见,新列表包含元素 Id
、Name
、Line1
、Line2
、Line3
、Line4
和 Line5
.
这个列表的类型是什么?
我的意思是,我将如何声明列表而不是 var?我需要这个用于进一步的目的。
喜欢:
List<theType> final = new List<theType>();
final = ...
您正在使用 new { }
语法创建 anonymous 类型。这意味着您只能使用 var
,除非您专门创建具有相同字段的 class。
如果您以后需要引用它,您可以创建一个 class 具有所有这些属性,例如
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; }
}
并更改您的查询以创建此 class
的新实例
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();
来自 anonymous types 上的文档:(强调)
Typically, when you use an anonymous type to initialize a variable, you declare the variable as an implicitly typed local variable by using var. The type name cannot be specified in the variable declaration because only the compiler has access to the underlying name of the anonymous type. For more information about var, see Implicitly Typed Local Variables.
如果您想在执行查询后重用该类型,最好的选择可能是为此目的创建一个 class。
另一种解决方案是使用 Tuple
,这样可以避免创建另一个 class,但如果您计划在太多位置引用该类型,使用起来会很痛苦。仅当您计划在同一方法中进一步处理数据时,我才可能使用 Tuple
。
(query, skill) => Tuple.Create(query.Id, query.Name, skill.Line1, skill.Line2,
skill.Line3, skill.Line4, skill.Line5 });
你最终会得到 List<Tuple<int, string, .... >
我不擅长 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();
如您所见,新列表包含元素 Id
、Name
、Line1
、Line2
、Line3
、Line4
和 Line5
.
这个列表的类型是什么? 我的意思是,我将如何声明列表而不是 var?我需要这个用于进一步的目的。
喜欢:
List<theType> final = new List<theType>();
final = ...
您正在使用 new { }
语法创建 anonymous 类型。这意味着您只能使用 var
,除非您专门创建具有相同字段的 class。
如果您以后需要引用它,您可以创建一个 class 具有所有这些属性,例如
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; }
}
并更改您的查询以创建此 class
的新实例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();
来自 anonymous types 上的文档:(强调)
Typically, when you use an anonymous type to initialize a variable, you declare the variable as an implicitly typed local variable by using var. The type name cannot be specified in the variable declaration because only the compiler has access to the underlying name of the anonymous type. For more information about var, see Implicitly Typed Local Variables.
如果您想在执行查询后重用该类型,最好的选择可能是为此目的创建一个 class。
另一种解决方案是使用 Tuple
,这样可以避免创建另一个 class,但如果您计划在太多位置引用该类型,使用起来会很痛苦。仅当您计划在同一方法中进一步处理数据时,我才可能使用 Tuple
。
(query, skill) => Tuple.Create(query.Id, query.Name, skill.Line1, skill.Line2,
skill.Line3, skill.Line4, skill.Line5 });
你最终会得到 List<Tuple<int, string, .... >