2013-01-02 62 views
3

我有这样的代码对LINQ选择项目Lambda表达式

var list = _db.Projects.Where(item => item.Loc =="IN").Select(p => new {id=p.Id, title=p.Title,pc=p.PostalCode }); 

有很多列的项目表,我需要从数据库中动态和加载查询所需的列,不随数据的所有列。

问题:

  1. 如何编写lambda表达式LINQ的选择?
  2. 如何通过选择特定列,实体框架来减少数据库读取数据?
+1

嗯......目前还不清楚你需要什么,因为你发布的代码似乎回答你自己的问题。你可以说得更详细点吗?你想要返回的对象是一个特定的类型?另外,除非您有一些存储大量数据的列,否则选择较少的列不太可能显着提高您的性能。 –

+0

嗨本Tidman,我需要建立一个选择动态查询与必填字段。所以我需要使用lamda表达式或linq表达式来获取.Select(p => new {id = p.Id,title = p.Title,pc = p.PostalCode})的动态代码。 –

+0

如果您要动态创建匿名类型(这似乎是您想要的),您将如何访问其成员? – svick

回答

1

看看生成的C#编译器和尝试复制它做什么的表达:

Expression<Func<Project, object>> lambda = 
    (Project p) => (object)new {id=p.Id, title=p.Title,pc=p.PostalCode }; 

我希望这个代码编译。如果没有,你一定能够修复它。之后,查看lambda变量的内容。

请注意,投到object只是在那里进行编译。你不需要/希望那是生产。

+0

嗨,我需要改变。选择(p => new {id = p.Id,title = p.Title,pc = p.PostalCode});与必填字段。 –

+0

@RameshBolla查看C#编译器生成的表达式,以便了解它的外观。你必须自己构建一个只包含必需字段的表达式。使用'Expression'类。 – usr