LINQ结果的对象类型

本文关键字:类型 对象 结果 LINQ | 更新日期: 2023-09-27 18:12:37

假设有两个类

Class A
{
  var a,b,c;
}
Class X
{
   var x,y,z;
}

我执行一个连接列表的ItemsSource,

(from A in a1 join X in x1 on A.a equals X.x select new {A.b, A.c, X.y, X.z}

我现在想从单击按钮

时的列表中检索数据上下文
var v = (Button)sender.DataContext as ???

我认为DataContext应该有一个如下的类,由LINQ操作

生成
Class ???
{
  var b,c,y,z;
}

有谁能帮我从LINQ生成的类中检索数据吗所以我可以访问

v.b
v.c
v.y
v.z

LINQ结果的对象类型

尝试使用动态类型,例如

var v = (Button)sender.DataContext as dynamic;
//Then access the values as v.b, e.t.c

不要在LINQ查询中创建匿名对象,而是使用自己定义的对象。

public class MyData
{
    public int b { get; set; }
    public int c { get; set; }
    public int y { get; set; }
    public int z { get; set; }
}

from A in a1 
join X in x1 on A.a equals X.x 
select new MyData()
{
    b = A.b, 
    c = A.c, 
    y = X.y, 
    z = X.z
}

还需要注意的是,您不能创建像var prop { get; set; }一样声明属性的class

只能在声明局部变量时使用关键字var

您正在错误地创建匿名对象。

select new {A.b, A.c, X.y, X.z}

应该写成

select new {b=A.b, c=A.c, y=X.y, z=X.z}
而不是

,那么您可以使用v.b,v.c等访问属性。

您创建的对象(如果它能工作的话)创建了名为'A.b', 'A.c', 'X.y'和'X.z'的空属性