gpt4 book ai didi

c# - 具有匿名类型和用户定义类型的 LINQ 选择查询

转载 作者:可可西里 更新时间:2023-11-01 03:06:23 26 4
gpt4 key购买 nike

匿名类在 C# 中具有只读属性。这通常用于在 linq select 查询中声明以从数据库中获取特定值。在我的代码中,我有以下查询。让我困惑的是使用 new 语句选择匿名类的新对象。我有一个模型类 StudentClerkshipsLogModel 。当我使用模型名称时,查询结果允许编辑。

var query = (from entity in _tblStudentClerkshipsLog.GetQueryable()
where entity.StudentID == intStudentID
select new StudentClerkshipsLogModel
{
StudentClerkshipID = entity.StudentClerkshipID,
StudentID = entity.StudentID,
ClerkshipID = entity.ClerkshipID,
}).ToList();

当我在 select 语句中的 new 之后没有提到类型时,我无法退出。编译器引发错误。匿名对象是只读的。

var query = (from entity in _tblStudentClerkshipsLog.GetQueryable()
where entity.StudentID == intStudentID
select new
{
StudentClerkshipID = entity.StudentClerkshipID,
StudentID = entity.StudentID,
ClerkshipID = entity.ClerkshipID,
}).ToList()

我的问题是 linq 如何以不同方式绑定(bind) about 两个查询。两个查询都具有动态绑定(bind),或者第一个是静态的。

谢谢

最佳答案

您遇到的错误实际上与 LINQ 没有任何关系。完全不使用 LINQ 也能看到同样的结果:

var anonymous = new { Name = "Fred" };
anonymous.Name = "Joe"; // Error, as properties of anonymous types are read-only

因此,如果您想修改 LINQ 查询获取的对象,则不应使用匿名类型。但是这两个 LINQ 查询都是静态绑定(bind)的——匿名类型在编译时仍然是完全已知的,并且编译器对它们应用正常的类型限制。例如:

var anonymous = new { Name = "Fred" };
Console.WriteLine(anonymous.Foo); // Error: no property Foo
int bar = anonymous.Name; // Error: no conversion from string to int

关于c# - 具有匿名类型和用户定义类型的 LINQ 选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32450582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com