entity framework中具有匿名类型的返回列表

我如何以匿名类型返回列表,因为我得到了这个代码

“找不到类型或命名空间名称’T’(您是否缺少using指令或程序集引用?)”

我只需要返回IdMember和UserName,谢谢

public static List 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(row.IdMember,row.Profile_Information.UserName)) 

要访问电线另一侧的成员属性,您需要使用:

 var id=t.Item1 var name=t.Item2 

因为您要返回匿名类型的对象,所以不能在方法的返回类型中声明它。 您尝试使用generics将不适用于此。 没有类型安全的方法来声明这样的方法。 如果您将返回类型声明为IList那么该应该可以正常工作,但您仍然没有类型安全性。

你真的只是更好地宣布这种类型。

更新:

声明一个简单的返回类型并不是那么糟糕。 你可以写一个这样的类:

 public class MemberItem { public string IdMember { get; set; } public string UserName { get; set; } } 

然后像这样编写你的方法:

 public static List 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 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(); } } 

只需使用和ArrayList

  public static ArrayList GetMembersItems(string ProjectGuid) { ArrayList items = new ArrayList(); items.AddRange(yourVariable .Where(p => p.Knowledge_Project.Guid == ProjectGuid) .ToList()); return items; } 

您可以通过将匿名类型转换为Object来返回匿名类型,但这很少有用。 但是,如果你从一个WebApi控制器返回它作为一个快速和(不那么)脏DTO然后我认为它是完全正常的。 这仅适用于JSON。 XML会抱怨架构或其他东西,但现在每个人都使用JSON 🙂

 public static List 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() .ToList(); } } 

您可以返回类型:NameValueCollection或KeyValuePair。 匿名类型不能是返回类型。