匿名类在 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/