返回实体框架中匿名类型的列表
本文关键字:类型 列表 实体 框架 返回 | 更新日期: 2023-09-27 18:04:39
如何使用匿名类型返回列表,因为使用此代码我得到
"类型或命名空间名称'T'无法找到(您是否缺少using指令或程序集引用?)"
我只需要返回IdMember和UserName,谢谢
public static List<T> GetMembersItems(string ProjectGuid)
{
using (PMEntities context = new PMEntities("name=PMEntities"))
{
var items = context.Knowledge_Project_Members.Include("Knowledge_Project").Include("Profile_Information")
.Where(p => p.Knowledge_Project.Guid == ProjectGuid)
.Select(row => new { IdMember = row.IdMember, UserName = row.Profile_Information.UserName });
return items.ToList();
}
}
类Tuple<>就是为这种情况创建的。像前面建议的那样创建自定义类更加清晰,但Tupple也完成了这项工作。
。
.Select(row => new Tuple<int,string>(row.IdMember,row.Profile_Information.UserName))
访问连接另一端的成员属性,您需要使用:
var id=t.Item1
var name=t.Item2
因为返回的是匿名类型的对象,所以不能在方法的返回类型中声明它。您尝试使用通用<T>
将无法解决此问题。没有类型安全的方式来声明这样的方法。如果你声明你的返回类型为IList
,那么应该工作,但你仍然不会有类型安全。
你最好声明这个类型。
更新:
声明一个简单的返回类型并不是那么糟糕。你可以这样写一个类:
public class MemberItem
{
public string IdMember { get; set; }
public string UserName { get; set; }
}
然后像这样写方法:
public static List<MemberItem> GetMembersItems(string ProjectGuid)
{
using (PMEntities context = new PMEntities("name=PMEntities"))
{
var items = context.Knowledge_Project_Members.Include("Knowledge_Project").Include("Profile_Information")
.Where(p => p.Knowledge_Project.Guid == ProjectGuid)
.Select(row => new MemberItem { IdMember = row.IdMember, UserName = row.Profile_Information.UserName });
return items.ToList();
}
}
匿名类型的作用域仅限于定义它们的方法。在您的情况下,您最好声明一个具有相关属性的单独类,并返回该类实例的集合。例如。
public class UserDetail
{
public int Id{get;set;}
public string UserName {get;set;}
}
public static List<UserDetail> GetMembersItems(string ProjectGuid)
{
using (PMEntities context = new PMEntities("name=PMEntities"))
{
var items = context.Knowledge_Project_Members.Include("Knowledge_Project").Include("Profile_Information")
.Where(p => p.Knowledge_Project.Guid == ProjectGuid)
.Select(row => new UserDetail{ IdMember = row.IdMember, UserName = row.Profile_Information.UserName });
return items.ToList();
}
}
您可以通过将匿名类型强制转换为Object来返回它们,但这很少有用。然而,如果你从一个WebApi控制器返回它,作为一个快速和(不是那么)脏的DTO,那么我认为它是完全好的。但这只适用于JSON。XML会抱怨模式之类的,但现在每个人都使用JSON:)
public static List<Object> GetMembersItems(string ProjectGuid)
{
using (PMEntities context = new PMEntities("name=PMEntities"))
{
var items = context.Knowledge_Project_Members.Include("Knowledge_Project").Include("Profile_Information")
.Where(p => p.Knowledge_Project.Guid == ProjectGuid)
.Select(row => new { IdMember = row.IdMember, UserName = row.Profile_Information.UserName });
return items
.ToList() // this is only needed to make EF happy otherwise it complains about the cast
.Cast<Object>()
.ToList();
}
}
用and ArrayList代替
public static ArrayList GetMembersItems(string ProjectGuid)
{
ArrayList items = new ArrayList();
items.AddRange(yourVariable
.Where(p => p.Knowledge_Project.Guid == ProjectGuid)
.ToList());
return items;
}
您可以返回类型:NameValueCollection或KeyValuePair。匿名类型不能是返回类型