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

标签 c# linq anonymous-class dynamic-binding

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

相关文章:

java - 匿名内部类 - getClass()

java - 为什么在匿名类中只能访问最终变量?

java - 单例、枚举和匿名内部类

c# - 引用实例化另一个的对象?

c# - WPF 视频传输控制

c# - 通过 json.net 中的属性名称查找值?

c# - LINQ 投影(选择)返回奇数结果

c# - 仅以 SA 用户身份运行的 Azure SQL 数据库存储过程

c# - 为什么下面的泛型方法调用不需要类型?

c# - 针对多个字段的 LINQ string[]