实体框架中具有匿名类型的返回列表

Pab*_*ind 9 c# linq asp.net 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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

sgt*_*gtz 11

Tuple <>类是为这种情况而设计的.如已建议的那样创建自定义类更清晰,但Tupple也完成了工作.

例如

.Select(row => new Tuple<int,string>(row.IdMember,row.Profile_Information.UserName))
Run Code Online (Sandbox Code Playgroud)

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

var id=t.Item1
var name=t.Item2
Run Code Online (Sandbox Code Playgroud)

  • 元组不在实体框架中工作,因为您需要使用它们的初始化函数创建它们,而实体框架只允许您使用具有默认构造函数的类型 (3认同)

Jac*_*cob 5

因为您要返回匿名类型的对象,所以不能在方法的返回类型中声明它.您尝试使用通用<T>将不适用于此.没有类型安全的方法来声明这样的方法.如果你声明你的返回类型IList应该有效,但你仍然没有类型安全.

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

更新:

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

public class MemberItem
{
    public string IdMember { get; set; }
    public string UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)