从dbset< t>中选择某些字段 [英] select certain fields from dbset<t>
本文介绍了从dbset< t>中选择某些字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
任何关于如何做的想法?
所以从客户端选择字段会返回以下错误。
var result = context.Customers.Select(c => new Customer {Name = c.Name,Age = c.Age})ToList();
实体或复合类型客户不能在LINQ to Entities查询中构建。
在System.Data.Objects.ELinq.ExpressionConverter.CheckInitializerType(类型类型)
在System.Data.Objects.ELinq.ExpressionConverter.MemberInitTranslator.TypedTranslate(ExpressionConverter parent,MemberInitExpression linq)
at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent,Expression linq)
在System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
在System.Data .Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda,DbExpression input)
在System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda,DbExpression input,DbExpressionBinding& binding)
在System.Data .Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent,MethodCallExpression调用,DbExpression& source,DbExpressionBinding& sourceBinding,DbExpression& lambda)
在Sys temp.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SelectTranslator.Translate sequenceMethod)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent,MethodCallExpression linq)
在System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent ,Expression linq)
在System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent,MethodCallExpression调用,DbExpression&来源,DbExpressionBinding& sourceBinding,DbExpression& lambda)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent,MethodCallExpression调用)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate( ExpressionConverter parent,MethodCallExpression调用,SequenceMethod sequenceMethod)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent,MethodCallExpression linq)
在System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator `1.Translate(ExpressionConverter parent,Expression linq)
在System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator。 Translate(ExpressionConverter parent,MethodCallExpression调用,DbExpression& source,DbExpressionBinding& sourceBinding,DbExpression& lambda)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent,MethodCallExpression调用)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent,MethodCallExpression调用,SequenceMethod sequenceMethod)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent,MethodCallExpression linq)
在System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate( ExpressionConverter parent,Expression linq)
在System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.AggregateTranslator.Translate(ExpressionConverter parent, MethodCallExpression调用)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Tra nslate(ExpressionConverter parent,MethodCallExpression调用,SequenceMethod sequenceMethod)
在System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent,MethodCallExpression linq)
在System.Data.Objects.ELinq.ExpressionConverter .TypedTranslator`1.Translate(ExpressionConverter parent,Expression linq)
在System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
在System.Data.Objects.ELinq.ExpressionConverter.Convert( )
在System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
在System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
在System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable< T> .GetEnumerator()
在System.Linq.Enumerable.Single [TSource](IEnumerable`1 source)
at System.Data.Objects.ELinq.ObjectQueryProvider< GetElementFunction> b__3 [TResult](IEnumerabl e`1序列)
在System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle [TResult](IEnumerable`1查询,表达式queryRoot)
在System.Data.Objects.ELinq.ObjectQueryProvider.System。 Linq.IQueryProvider.Execute [S](表达式表达式)
在System.Data.Entity.Internal.Linq.DbQueryProvider.Execute [TResult](表达式表达式)
在System.Linq.Queryable.Count [ TSource](IQueryable`1 source)
解决方案
视图设置正确,客户是您的上下文中的 DbSet< Customer>
属性。
var result = context.Customers.Select(c =>新的{c.Name,c.Age,c.AnyOtherProperty});
编辑:使用自己的类而不是匿名类型显示。
var result = context.Customers.Select(c => new YourClassName {c.Name,c.Age,c.AnyOtherProperty});
I am using EF4.1, and for performance issues I need to select only a few fields from a DbSet which is mapped to a view on the sql server.
Any ideas about how to do that?
so selecting fields from Customer would return the below error.
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)
解决方案
Assuming your mapping to the view is setup correctly and where Customers is a DbSet<Customer>
property on your Context.
var result = context.Customers.Select(c => new {c.Name,c.Age, c.AnyOtherProperty});
Edit: To show using your own class rather than an anonymous type.
var result = context.Customers.Select(c => new YourClassName{c.Name,c.Age, c.AnyOtherProperty});
这篇关于从dbset< t>中选择某些字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文