Entity framework 从dbset中选择某些字段<;t>;

Entity framework 从dbset中选择某些字段<;t>;,entity-framework,poco,Entity Framework,Poco,我使用的是EF4.1,对于性能问题,我只需要从映射到sql server上的视图的数据库集中选择几个字段 有什么办法吗 因此,从Customer中选择字段将返回以下错误 var result = context.Customers.Select(c => new Customer{ Name = c.Name,Age = c.Age}).ToList(); The entity or complex type 'Customer' cannot be constructed in a L

我使用的是EF4.1,对于性能问题,我只需要从映射到sql server上的视图的数据库集中选择几个字段

有什么办法吗

因此,从Customer中选择字段将返回以下错误

var result = context.Customers.Select(c => new Customer{ Name = c.Name,Age = c.Age}).ToList();

The entity or complex type 'Customer' cannot be constructed in a LINQ to Entities query.
   at System.Data.Objects.ELinq.ExpressionConverter.CheckInitializerType(Type type)
   at System.Data.Objects.ELinq.ExpressionConverter.MemberInitTranslator.TypedTranslate(ExpressionConverter parent, MemberInitExpression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input)
   at System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input, DbExpressionBinding& binding)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SelectTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.AggregateTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)
   at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
   at System.Data.Objects.ELinq.ExpressionConverter.Convert()
   at System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
   at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__3[TResult](IEnumerable`1 sequence)
   at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
   at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression)
   at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.Count[TSource](IQueryable`1 source)
var result=context.Customers.Select(c=>newcustomer{Name=c.Name,Age=c.Age}).ToList();
无法在LINQ to Entities查询中构造实体或复杂类型“Customer”。
位于System.Data.Objects.Elink.ExpressionConverter.CheckInitializerType(类型)
位于System.Data.Objects.Elink.ExpressionConverter.MemberInitTranslator.TypedTranslate(ExpressionConverter父级,MemberInitExpression linq)
位于System.Data.Objects.Elink.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter父级,表达式linq)
位于System.Data.Objects.Elink.ExpressionConverter.TranslateExpression(表达式linq)
位于System.Data.Objects.elink.ExpressionConverter.TranslateLambda(LambdaExpression lambda,DbExpression input)
位于System.Data.Objects.eliq.ExpressionConverter.TranslateLambda(LambdaExpression lambda、DbExpression input、DbExpressionBinding&binding)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter父级、MethodCallExpression调用、DbExpression和source、DbExpressionBinding和sourceBinding、DbExpression和lambda)
在System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.SelectTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用,SequenceMethod SequenceMethod)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter父级,MethodCallExpression linq)
位于System.Data.Objects.Elink.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter父级,表达式linq)
位于System.Data.Objects.Elink.ExpressionConverter.TranslateExpression(表达式linq)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter父级、MethodCallExpression调用、DbExpression和source、DbExpressionBinding和sourceBinding、DbExpression和lambda)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用,SequenceMethod SequenceMethod)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter父级,MethodCallExpression linq)
位于System.Data.Objects.Elink.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter父级,表达式linq)
位于System.Data.Objects.Elink.ExpressionConverter.TranslateExpression(表达式linq)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter父级、MethodCallExpression调用、DbExpression和source、DbExpressionBinding和sourceBinding、DbExpression和lambda)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用,SequenceMethod SequenceMethod)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter父级,MethodCallExpression linq)
位于System.Data.Objects.Elink.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter父级,表达式linq)
位于System.Data.Objects.Elink.ExpressionConverter.TranslateExpression(表达式linq)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.AggregateTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter父级,MethodCallExpression调用,SequenceMethod SequenceMethod)
位于System.Data.Objects.Elink.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter父级,MethodCallExpression linq)
位于System.Data.Objects.Elink.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter父级,表达式linq)
位于System.Data.Objects.Elink.ExpressionConverter.TranslateExpression(表达式linq)
在System.Data.Objects.Elink.ExpressionConverter.Convert()中
位于System.Data.Objects.elink.elinkQueryState.GetExecutionPlan(可为null `1 forMergeOption)
位于System.Data.Objects.ObjectQuery`1.GetResults(可为null`1 forMergeOption)
位于System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator()
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
在System.Data.Objects.Elink.ObjectQueryProvider.b__3[TResult](IEnumerable`1序列)
在System.Data.Objects.Elink.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1查询,表达式queryRoot)
位于System.Data.Objects.Elink.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](表达式)
在System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](表达式)处
在System.Linq.Queryable.Count[TSource](IQueryable`1源)处

假设视图的映射设置正确,并且客户是上下文中的
DbSet
属性

var result = context.Customers.Select(c => new {c.Name,c.Age, c.AnyOtherProperty});
编辑:使用自己的类而不是匿名类型显示

var result = context.Customers.Select(c => new YourClassName{c.Name,c.Age, c.AnyOtherProperty});

在EF4.1中,它看起来像是一个bug,因为它是同一个类,所以它将其视为SQL聚合函数并试图解决它。你可以试试下面的

var q = context.Customers.Select(c=>new {Name=c.Name, Age=c.Age});

foreach(var x in q)
{
    yield new Customer {Name=c.Name, Age=c.Age};
}
这是另一种方法
var myResult = context.Customers.Where(c => c.Name== "someName" && c.Age == age).Select(c => c.Name);

for each (var x in myResult)
{
   //do whatever
}