2013-11-01 15 views
12

Bu hatayı neden aldığımı anlayamıyorum. Bu işlevi, Entity Framework'ün önceki sürümleriyle başarıyla kullandım, ancak EF6 kullanarak yeni bir proje kurdum ve işbirliği yapmıyor.LINQ to Varlıklar, yöntemi tanımaz 'System.String StringConvert (System.Nullable`1 [System.Double])

using System.Data; 
using System.Data.Objects.SqlClient; 

e.Result = from n in MyDB.tblBulletins 
    where n.AnncStart <= DateTime.Now && n.AnncEnd > DateTime.Now && n.Approved == true 
    orderby n.AnncStart descending, n.AnncDate descending 
    select new 
    { 
     n.RecID, 
     AnncTitle = n.AnncTitle + " <a href='bulletinAdd.aspx?ID=" + SqlFunctions.StringConvert((double)n.RecID).Trim() + "'><Edit></a>", 
     AnncText = (n.AnncImg == null ? n.AnncText : "<a href='images/bulletin/" + n.AnncImg + "'><img src='images/bulletin/" + n.AnncImg + "' class='stickyphoto' alt='Click for larger image'/></a>" + n.AnncText), 
     Email = (n.Email == null ? "" : "<br/><a href='mailto:" + n.Email + "'>" + n.Email + "</a>"), 
     n.AnncType, 
     n.AnncDate, 
     n.AnncEnd, 
     n.v_EmpBasicInfo.Name 
     }; 

yöntemi 'System.string StringConvert (System.Nullable`1 [System.Double])' yöntem olup, bu yöntem tanımıyor varlıkları için LINQ tercüme edilemez Bu çalıştırmak zaman olsun Bir mağaza ifadesi.

n.RecID SQL veritabanında masaya bir int birincil anahtar (SQL Server Standard Edition)

Tüm İnsanların yerine ToString

ADDITION ait StringConvert tavsiyesinde aramalar üzerinden bulmak için görünebilir - Yığın İzleme: Sen string dönüştürmek gerekmez

[NotSupportedException: LINQ to Entities does not recognize the method 'System.String StringConvert(System.Nullable`1[System.Double])' method, and this method cannot be translated into a store expression.] 
System.Data.Entity.Core.Objects.ELinq.DefaultTranslator.Translate(ExpressionConverter parent, MethodCallExpression call) +194 
System.Data.Entity.Core.Objects.ELinq.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq) +976 
System.Data.Entity.Core.Objects.ELinq.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) +88 
System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) +148 
System.Data.Entity.Core.Objects.ELinq.BinaryTranslator.TypedTranslate(ExpressionConverter parent, BinaryExpression linq) +122 
System.Data.Entity.Core.Objects.ELinq.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) +88 
System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) +148 
System.Data.Entity.Core.Objects.ELinq.BinaryTranslator.TypedTranslate(ExpressionConverter parent, BinaryExpression linq) +87 
System.Data.Entity.Core.Objects.ELinq.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) +88 
System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) +148 
System.Data.Entity.Core.Objects.ELinq.NewTranslator.TypedTranslate(ExpressionConverter parent, NewExpression linq) +520 
System.Data.Entity.Core.Objects.ELinq.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) +88 
System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) +148 
System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input) +168 
System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input, DbExpressionBinding& binding) +160 
System.Data.Entity.Core.Objects.ELinq.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda) +168 
System.Data.Entity.Core.Objects.ELinq.SelectTranslator.Translate(ExpressionConverter parent, MethodCallExpression call) +70 
System.Data.Entity.Core.Objects.ELinq.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod) +47 
System.Data.Entity.Core.Objects.ELinq.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq) +141 
System.Data.Entity.Core.Objects.ELinq.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) +88 
System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) +148 
System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.Convert() +50 
System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption) +563 
System.Data.Entity.Core.Objects.<>c__DisplayClassb.<GetResults>b__a() +83 
System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction(Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) +499 
System.Data.Entity.Core.Objects.<>c__DisplayClassb.<GetResults>b__9() +271 
System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Func`1 operation) +251 
System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +600 
    System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() +89 
System.Lazy`1.CreateValue() +416 
System.Lazy`1.LazyInitValue() +152 
System.Lazy`1.get_Value() +75 
System.Data.Entity.Internal.LazyEnumerator`1.MoveNext() +40 
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +381 
System.Linq.Enumerable.ToList(IEnumerable`1 source) +58 

[TargetInvocationException: Exception has been thrown by the target of an invocation.] 
System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) +0 
System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) +92 
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +108 
System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) +19 
System.Web.UI.WebControls.QueryableDataSourceHelper.ToList(IQueryable query, Type dataObjectType) +225 
System.Web.UI.WebControls.LinqDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +549 
System.Web.UI.WebControls.Repeater.GetData() +55 
System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) +89 
System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) +61 
System.Web.UI.WebControls.Repeater.DataBind() +105 
System.Web.UI.WebControls.Repeater.EnsureDataBound() +49 
System.Web.UI.WebControls.Repeater.OnPreRender(EventArgs e) +15 
System.Web.UI.Control.PreRenderRecursiveInternal() +83 
System.Web.UI.Control.PreRenderRecursiveInternal() +168 
System.Web.UI.Control.PreRenderRecursiveInternal() +168 
System.Web.UI.Control.PreRenderRecursiveInternal() +168 
System.Web.UI.Control.PreRenderRecursiveInternal() +168 
System.Web.UI.Control.PreRenderRecursiveInternal() +168 
System.Web.UI.Control.PreRenderRecursiveInternal() +168 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +974 
+0

sadece Hayal mi ya da veri erişimi içine görünümü endişeleri (HTML kod oluşturma) koyuyorsun? Bu biraz [koklamak] (https://en.wikipedia.org/wiki/Code_smell). –

+0

@ tim-s Bunun nasıl yapılacağından emin değilim. Veri dosyamda neyin gösterileceği, hangi verilerin döndüğüne bağlıdır. Ben kesinlikle bir ana programcı değilim, bu yüzden herhangi bir öneri memnuniyetle karşılarım. –

+0

@JenniferL Tüm linq extenstions yöntemleri desteklenmiyor lütfen bakınız ..http: //msdn.microsoft.com/en-us/library/bb738550.aspx –

cevap

38

Aynı sorun vardı ve yanlış SqlFunctions türünü kullandığımı fark ettim.

using System.Data.Entity.SqlServer; 

değil: Eğer doğru ad başvurulan emin olun,

using System.Data.Objects.SqlClient; 
+2

aynı şey olsun, EF6'ya yükselttikten sonra bu hatayı aldım ve doğru derleme değiştirdikten sonra çalışıyordu. – hazimdikenli

+1

Bu, EF standart .net framework'ten çıkarıldığında ve ayrı bir gruba taşındığında olmuş olmalı. Talihsiz. – recursive

+3

Bu, doğru cevap olarak işaretlenmelidir! –

1

, dize birleştirme o ilgilenir. Ayrıca, ToString numaralı telefonu da aramak zorunda değilsiniz.

+0

Ancak istisna EF'nin 'StringConvert (double? value)' değerini tanımıyor. Niye ya? Bu yöntem sadece bu kullanım için tam olarak vardır. Neyi kaçırıyorum? – pescolino

+0

@pescolino, Emin değilim ama 'SqlFunctions.StringConvert ((double?) N.RecID) ' – Habib

+0

Teşekkürler @pescolino ve @Habib! StringConvert'ı kaldırmayı denedim ve 'System.Object' türünü yazmak için 'System.Int32' türünü yazmak için _Unable'ı aldım. LINQ to Tüzel Kişiler, yalnızca EDM ilkel veya sayım türleri dökümünü desteklemektedir. Ben çifttikten sonra orijinal hata –

İlgili konular