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

时间:2011-08-04 04:27:28

标签: c# asp.net linq 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();
        }
    }

6 个答案:

答案 0 :(得分:11)

Tuple&lt;&gt; 类适用于此类情况。如已建议的那样创建自定义类更清晰,但Tupple也完成了工作。

e.g。

.Select(row => new Tuple<int,string>(row.IdMember,row.Profile_Information.UserName))

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

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

答案 1 :(得分:5)

因为您要返回匿名类型的对象,所以不能在方法的返回类型中声明它。您尝试使用通用<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();
    }
}

答案 2 :(得分:3)

匿名类型的范围仅限于定义它们的方法。在您的情况下,您最好使用相关属性声明一个单独的类,并返回该类实例的集合。例如,

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

答案 3 :(得分:1)

只需使用和ArrayList

    public static ArrayList GetMembersItems(string ProjectGuid)
    {
        ArrayList items = new ArrayList(); 

              items.AddRange(yourVariable 
                        .Where(p => p.Knowledge_Project.Guid == ProjectGuid)
                        .ToList());
            return items;
    }

答案 4 :(得分:1)

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

#!/usr/bin/env python3

import os

target_filename = 'filtered_data.tar.gz'
top_src_dir = '.'
top_dest_dir = 'dest'

# Walk the source directory recursively looking for
# target_filename
for parent, dirs, files in os.walk(top_src_dir):
    # debugging
    # print(parent, dirs, files)

    # Skip this directory if target_filename not found
    if target_filename not in files:
        continue

    # Strip off all path parts except the immediate parent
    local_parent = os.path.split(parent)[-1]
    # Compute the full, relative path to the symlink
    dest_file = os.path.join(top_dest_dir, local_parent, target_filename)

    # debugging
    # print('{} {}'.format(dest_file, os.path.exists(dest_file)))

    # Nothing to do if it already exists
    if os.path.exists(dest_file):
        print('{} already exists'.format(dest_file))
        continue

    # Make sure the destination path exists
    dest_dir = os.path.dirname(dest_file)
    os.makedirs(dest_dir, exist_ok=True)

    # Translate the relative path to target_filename
    # to be relative based on the new destination dir
    src_file = os.path.join(parent, target_filename)
    src_file = os.path.relpath(src_file, start=dest_dir)

    os.symlink(src_file, dest_file)
    print('{} --> {}'.format(dest_file, src_file))

答案 5 :(得分:0)

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