Asp.net 尝试从中间层类传回LINQ查询

Asp.net 尝试从中间层类传回LINQ查询,asp.net,linq,entity-framework-5,Asp.net,Linq,Entity Framework 5,需要一些帮助来破译从驻留在中间层类中的LINQ查询传回数据的正确方法 我可以很好地使用第一个查询,但无法从父实体或项目实体中选择任何特定列 public List<Project> GetProjects() { try { using (YeagerTechEntities DbContext = new YeagerTechEntities()) {

需要一些帮助来破译从驻留在中间层类中的LINQ查询传回数据的正确方法

我可以很好地使用第一个查询,但无法从父实体或项目实体中选择任何特定列

public List<Project> GetProjects()
        {
            try
            {
                using (YeagerTechEntities DbContext = new YeagerTechEntities())
                {
                    DbContext.Configuration.ProxyCreationEnabled = false;
                    DbContext.Database.Connection.Open();

                    IEnumerable<Project> project = DbContext.Projects.Where(p => p.ProjectID > 0);

                    List<Project> myProjects = new List<Project>();

                    myProjects = project.ToList();

                    return myProjects;

                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
下面是修改后的LINQ查询,我从中得到了错误:

public List<Project> GetProjects()
{
    try
    {
        using (YeagerTechEntities DbContext = new YeagerTechEntities())
        {
            DbContext.Configuration.ProxyCreationEnabled = false;
            DbContext.Database.Connection.Open();

            IEnumerable<Project> project = DbContext.Projects.Where(p => p.ProjectID > 0);
            ProjectFields projflds = new ProjectFields();

            var proj = project.Select(s => new
            {
                projflds.CategoryID = s.CategoryID,
                projflds.Quote = s.Quote,
                projflds.Name = s.Name,
                projflds.PriorityName = priname = s.Priority.Description,
                projflds.CategoryName = catname = s.Category.Description,
                projflds.StatusName = statname = s.Status.Description,
                projflds.Email = s.Customer.Email,
                projflds.City = s.Customer.City
            });

            List<Project> myProjects = new List<Project>();

            myProjects = project.ToList();

            return myProjects;
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
public List GetProjects()
{
尝试
{
使用(YeagerTechEntities DbContext=new YeagerTechEntities())
{
DbContext.Configuration.ProxyCreationEnabled=false;
DbContext.Database.Connection.Open();
IEnumerable project=DbContext.Projects.Where(p=>p.ProjectID>0);
ProjectFields projflds=新的ProjectFields();
var proj=project.Select(s=>new
{
projflds.CategoryID=s.CategoryID,
projflds.Quote=s.Quote,
projflds.Name=s.Name,
projflds.PriorityName=priname=s.Priority.Description,
projflds.CategoryName=catname=s.Category.Description,
projflds.StatusName=statname=s.Status.Description,
projflds.Email=s.Customer.Email,
projflds.City=s.Customer.City
});
List myProjects=new List();
myProjects=project.ToList();
归还我的项目;
}
}
捕获(例外情况除外)
{
掷骰子;
}
}

您正在使用select new属性创建一个匿名类型,这就是该属性与project类不同的原因。下面将创建一个新类型,因此首先您需要列出一个列表,您不能直接强制转换该类型

var proj = project.Select(s => new
                {
                    s.CategoryID,
                    s.Quote,
                    s.Name,
                    priname = s.Priority.Description,
                    catname = s.Category.Description,
                    statname = s.Status.Description,
                    s.Customer.Email,
                    s.Customer.City
                }
做一些类似下面链接的事情


您正在使用select new属性创建一个匿名类型,这就是为什么该属性与project类不同的原因。下面将创建一个新类型,因此首先您需要列出一个列表,您不能直接强制转换该类型

var proj = project.Select(s => new
                {
                    s.CategoryID,
                    s.Quote,
                    s.Name,
                    priname = s.Priority.Description,
                    catname = s.Category.Description,
                    statname = s.Status.Description,
                    s.Customer.Email,
                    s.Customer.City
                }
做一些类似下面链接的事情


您就快到了,只有几个最后的修复:

public List<ProjectFields> GetProjects()
{
    try
    {
        using (YeagerTechEntities DbContext = new YeagerTechEntities())
        {
            DbContext.Configuration.ProxyCreationEnabled = false;
            DbContext.Database.Connection.Open();

            IQueryable<Project> project = DbContext.Projects.Where(p => p.ProjectID > 0);
            var proj = project.Select(s => new ProjectFields
            {
                CategoryID = s.CategoryID,
                Quote = s.Quote,
                Name = s.Name,
                PriorityName = s.Priority.Description,
                CategoryName = s.Category.Description,
                StatusName = s.Status.Description,
                Email = s.Customer.Email,
                City = s.Customer.City
            });

            List<ProjectFields> myProjects = project.ToList();

            return myProjects;
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
public List GetProjects()
{
尝试
{
使用(YeagerTechEntities DbContext=new YeagerTechEntities())
{
DbContext.Configuration.ProxyCreationEnabled=false;
DbContext.Database.Connection.Open();
IQueryable project=DbContext.Projects.Where(p=>p.ProjectID>0);
var proj=project。选择(s=>newprojectfields
{
CategoryID=s.CategoryID,
Quote=s.Quote,
Name=s.Name,
PriorityName=s.Priority.Description,
CategoryName=s.Category.Description,
StatusName=s.Status.Description,
Email=s.Customer.Email,
城市=s.Customer.City
});
List myProjects=project.ToList();
归还我的项目;
}
}
捕获(例外情况除外)
{
掷骰子;
}
}

您就快到了,只有两个最终修复:

public List<ProjectFields> GetProjects()
{
    try
    {
        using (YeagerTechEntities DbContext = new YeagerTechEntities())
        {
            DbContext.Configuration.ProxyCreationEnabled = false;
            DbContext.Database.Connection.Open();

            IQueryable<Project> project = DbContext.Projects.Where(p => p.ProjectID > 0);
            var proj = project.Select(s => new ProjectFields
            {
                CategoryID = s.CategoryID,
                Quote = s.Quote,
                Name = s.Name,
                PriorityName = s.Priority.Description,
                CategoryName = s.Category.Description,
                StatusName = s.Status.Description,
                Email = s.Customer.Email,
                City = s.Customer.City
            });

            List<ProjectFields> myProjects = project.ToList();

            return myProjects;
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
public List GetProjects()
{
尝试
{
使用(YeagerTechEntities DbContext=new YeagerTechEntities())
{
DbContext.Configuration.ProxyCreationEnabled=false;
DbContext.Database.Connection.Open();
IQueryable project=DbContext.Projects.Where(p=>p.ProjectID>0);
var proj=project。选择(s=>newprojectfields
{
CategoryID=s.CategoryID,
Quote=s.Quote,
Name=s.Name,
PriorityName=s.Priority.Description,
CategoryName=s.Category.Description,
StatusName=s.Status.Description,
Email=s.Customer.Email,
城市=s.Customer.City
});
List myProjects=project.ToList();
归还我的项目;
}
}
捕获(例外情况除外)
{
掷骰子;
}
}

“转换匿名类型#1”:定义一个新类,该类具有您希望在该对象中使用的显式属性,而不仅仅是执行
新建{property1=…}
,即,您可以在层之间传递类型定义。或者这是一个
项目
只填充了较少的字段-你能使用它吗?上周五我试图编辑,但没有通过。如果您可以投票支持编辑以显示它,它将显示我尝试此技术时遇到的错误,因此,最终通过您的反馈解决错误。请投票支持编辑。去掉try/catch块。“转换匿名类型#1”:定义一个新的类,该类具有您希望在该对象中使用的显式属性,而不仅仅是执行
new{property1=…}
,也就是说,您可以在层之间传递类型定义。或者这是一个
项目
只填充了较少的字段-你能使用它吗?上周五我试图编辑,但没有通过。如果您可以投票支持编辑以显示它,它将显示我尝试此技术时遇到的错误,因此,最终通过您的反馈解决错误。请投票支持编辑。去掉try/catch块。它只成功地弄乱了堆栈跟踪。我上周五添加了一个修订,但没有通过。我又添加了一次,所以你可以看到它,因为在尝试了你的建议后,我遇到了一个错误…我上周五试图编辑,但没有通过。如果您可以投票支持编辑以显示它,它将显示我尝试此技术时遇到的错误,因此,最终通过您的反馈解决错误。请投票支持编辑。我认为这个想法是如果你需要一个实质性的答案,那么你就把它编辑成问题。我在今天的编辑中已经这样做了。不,我们的想法是将返回类型更改为
ProjectFields
并执行
project。选择(s=>newprojectfiel
var proj = project.Select(s => new Project
            {
                Name=s.Name
            }
public List<ProjectFields> GetProjects()
{
    try
    {
        using (YeagerTechEntities DbContext = new YeagerTechEntities())
        {
            DbContext.Configuration.ProxyCreationEnabled = false;
            DbContext.Database.Connection.Open();

            IQueryable<Project> project = DbContext.Projects.Where(p => p.ProjectID > 0);
            var proj = project.Select(s => new ProjectFields
            {
                CategoryID = s.CategoryID,
                Quote = s.Quote,
                Name = s.Name,
                PriorityName = s.Priority.Description,
                CategoryName = s.Category.Description,
                StatusName = s.Status.Description,
                Email = s.Customer.Email,
                City = s.Customer.City
            });

            List<ProjectFields> myProjects = project.ToList();

            return myProjects;
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}