You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET EF中如何使用匿名类型数据及获取ArrayList替代方案

嘿,我来帮你搞定这两个问题!

问题1:使用匿名类型数组中的ID和Name字段

首先,在你当前的方法里,匿名类型的属性是可以直接访问的——编译器能自动推断出它的类型。你可以通过遍历数组来逐个获取每个元素的id和name:

MyEntitiesCONF db = new MyEntitiesCONF(); 
var query = (from p in db.f 
             join q in db.members on p.friend_id equals q.ID 
             where p.uid == 1 
             select new { name = q.Name, id = p.friend_id, }).ToArray();

// 遍历数组访问每个元素的属性
foreach (var friend in query)
{
    int friendId = friend.id;
    string friendName = friend.name;
    
    // 这里就可以用这两个值做你需要的操作了,比如打印、存储到其他集合里等等
    Console.WriteLine($"好友ID:{friendId},姓名:{friendName}");
}

如果你需要在当前方法之外使用这些数据,匿名类型就不太方便了(因为匿名类型的作用域仅限于定义它的方法)。这时候建议你创建一个自定义的实体类来承载数据:

// 定义一个实体类
public class FriendInfo
{
    public int Id { get; set; }
    public string Name { get; set; }
}

然后修改查询语句,返回这个类的数组:

var query = (from p in db.f 
             join q in db.members on p.friend_id equals q.ID 
             where p.uid == 1 
             select new FriendInfo { Name = q.Name, Id = p.friend_id }).ToArray();

这样不管在哪个方法里,你都能直接访问FriendInfo对象的Id和Name属性啦。

问题2:获取ArrayList而非匿名类型数组

首先得提一句:ArrayList是.NET早期的非泛型集合,现在更推荐用泛型集合(比如List<T>),因为类型更安全。不过如果你确实需要ArrayList的话,有两种简单的方式:

方式1:直接把匿名数组转成ArrayList

ArrayList可以容纳任意类型的对象,所以直接把你的匿名数组传进去就行:

var query = (from p in db.f 
             join q in db.members on p.friend_id equals q.ID 
             where p.uid == 1 
             select new { name = q.Name, id = p.friend_id }).ToArray();

ArrayList friendList = new ArrayList(query);

方式2:遍历查询结果逐个添加到ArrayList

如果你想手动控制添加过程,也可以循环遍历查询结果,把每个匿名对象加到ArrayList里:

ArrayList friendList = new ArrayList();
foreach (var friend in query)
{
    friendList.Add(friend);
}

注意:访问ArrayList中的元素

因为ArrayList里存的是object类型,所以后续访问属性的时候,你需要用dynamic来推断类型(这是最简单的方式):

foreach (dynamic friend in friendList)
{
    int friendId = friend.id;
    string friendName = friend.name;
    // 执行你的操作
}

如果你用了前面提到的FriendInfo实体类,那可以直接强转,类型更安全:

foreach (FriendInfo friend in friendList)
{
    int friendId = friend.Id;
    string friendName = friend.Name;
}

内容的提问来源于stack exchange,提问作者behzad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:46:38