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
相关产品推荐
相关产品推荐

