1

我正在使用 C# 和实体框架 asp.net MVC 4

基本上我希望我的索引页只有我的 SQL 表中的几列。但我仍然想使用那个 sql 表类。这是我的示例,用于使用 POCO 类的 Enity 框架从 SQL 中仅选择某些列。

//in the controller I get back a list of student entities
var students = from s in studentRepository.GetStudents()
               select s;

//Below in the repository I have a function getstudents that with return all students
public IEnumerable<Student> GetStudents()
{

    //I create a list of anonymous types
    var result = (from a in context.Students
                  select new
                  {
                      FirstMidName = a.FirstMidName,
                  }
                 ).ToList();

    //I set the anonymous types to student types
    IEnumerable<Student> x = from k in result
                             select new Student
                             {
                                 FirstMidName = k.FirstMidName
                             };

     //I return the list of students with only there name variable set
     return x;
}

这是所有创建的sql

SELECT 
1 AS [C1], 
[Extent1].[FirstName] AS [FirstName]
FROM [dbo].[Person] AS [Extent1]
WHERE [Extent1].[Discriminator] = N'Student'

所以基本上我想知道我的方法有什么问题吗?执行此操作可能出现的任何问题。还有更好的方法吗?

4

2 回答 2

0

不需要使用.ToList,你也可以使用.AsEnumerable

public IEnumerable<Student> GetStudents()
{
    return context.Students
                .Select(s => new {s.FirstName})
                .AsEnumerable()
                .Select(s => new Student {FirstName=s.FirstName});
}

此外,我建议在这种情况下使用 LINQ 方法语法——更简洁。

于 2013-10-13T07:13:26.990 回答
0

你可以使用这个 DLL Value Injecter - 基于约定的映射器

值注入是一种算法,它从源对象的特定属性(如果它具有属性,如果它是一个 int/string 等,而不仅仅是获取值)中获取值并将它们插入到目标对象的属性中。它选择从源对象的哪些属性中获取值以及将它们放在源对象中的什么位置。

在此处查看文档

 var result = (from a in context.Students
                  select new
                  {
                      FirstMidName = a.FirstMidName,
                  }
                      ).ToList();

List<Student> students = new List<Student>();
students.InjectFrom(result);
于 2013-10-13T02:55:57.873 回答