[英]return list with anonymous type in entity framework
我如何使用匿名類型返回列表,因為使用此代碼我得到
“找不到類型或命名空間名稱‘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();
}
}
只需使用和 ArrayList 代替
public static ArrayList GetMembersItems(string ProjectGuid)
{
ArrayList items = new ArrayList();
items.AddRange(yourVariable
.Where(p => p.Knowledge_Project.Guid == ProjectGuid)
.ToList());
return items;
}
您可以改為返回 type:NameValueCollection 或 KeyValuePair。 匿名類型不能是返回類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.