2010-01-13 50 views
68

Estoy usando Entity Framework en mi código basado en C#. Me encuentro con una rareza inesperada y estoy buscando sugerencias.Entity Framework - No se puede convertir la expresión lambda para escribir 'cadena' porque no es un tipo de delegado

Caso 1, 2, 3, 4 ... Proyectos:
RivWorks.dll
RivWorks.Service.dll
RivWorks.Alpha.dll

muestras (todos de estos trabajos):
RivWorks.Alpha.dll:

public static bool EndNegotitation(long ProductID) 
{ 
    var product = (from a in _dbFeed.AutoWithImage 
        where a.AutoID == ProductID select a).FirstOrDefault(); 
... 
} 

RivWorks.Service.dll

public static RivWorks.Model.NegotiationAutos.AutoWithImage 
    GetProductById(long productId) 
{ 
    var myProduct = from a in _dbFeed.AutoWithImage 
        where a.AutoID == productId select a; 

    return myProduct.FirstOrDefault(); 
} 
public static List<RivWorks.Model.NegotiationAutos.AutoWithImage> 
    GetProductByCompany(Guid companyId) 
{ 
    var myProduct = from a in _dbFeed.AutoWithImage 
        where a.CompanyID == companyId select a; 

    return myProduct.ToList(); 
} 

etc

Caso "rareza":
(proyecto WCF) RivWorks.Web.Service.dll
Contiene las mismas referencias que los otros proyectos.

public NegotiateSetup GetSetup(string method, string jsonInput) 
{ 
    ... 
    long.TryParse(ProductID, out result); 
    var product = (from a in _dbFeed.AutoWithImage 
        where a.AutoID == result select a).FirstOrDefault(); 
    ... 
} 

Estoy consiguiendo este error de tiempo de compilación (la palabra "donde" se destaca en mi editor):
No se puede convertir la expresión lambda al tipo 'cadena' porque no es un tipo de delegado

¿Alguna idea de qué podría causar esto?

+0

Eso suena extraño. Si elimina la llamada a 'FirstOrDefault', ¿qué ocurre?Obviamente, fallará cuando trates de usar 'producto' luego, ¿pero compila esa declaración? –

+0

Además, si lo cambia a 'var product = _dbFeed.AutoWithImage.Where (a => a.AutoID == result);' ¿qué sucede entonces? Saquemos las expresiones de consulta de la mezcla ... –

+1

Todos esos ejemplos fallan. Sin embargo, revisé las instrucciones de Uso en todos mis fragmentos de código y descubrí que me faltaba uno: Usar System.Linq; Eso corrigió el error.

Respuesta

106

Para aquellos interesados ​​en el resultado:
Me faltaba una simple instrucción de uso al principio de mi código.

using System.Linq; 

Esto lo solucionó.

+13

Me sorprende que ni VS ni ReSharper sean lo suficientemente inteligentes como para detectar esta condición. Afortunadamente SO es más inteligente que ambos. – bwerks

+0

Gracias, ni siquiera pensé en eso hasta que leí esto. –

+2

Recibo el mismo mensaje err, y tengo (y "siempre tuve") usando System.LINQ. Por supuesto, uno de los miembros del modelo cambió los tipos de datos de la cadena [] a la cadena ... –

7

En mi caso, tuve la

Using System.Linq; 

pero me faltaba la & & después de un punto en donde cláusula.

Código malo:

item.Group.ID == grp.ID 
p.Product_Status_Flag == 1 && 
item.Valid 

código correcto (sin error):

item.Group.ID == grp.ID && // <- This was missing and I didn't see it right away. 
p.Product_Status_Flag == 1 && 
item.Valid 

espero que esto ahorra a alguien algún tiempo.

7

Estuve luchando con esto en una plantilla de Telerik Grid dentro de una vista Razor durante aproximadamente una hora. En mi caso, esto:

columns.Bound(x => x.ID).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.ID)">@item.ID</a></text>); 

se supone que es la siguiente:

columns.Bound(x => x.Id).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.Id)">@item.Id</a></text>); 

El caso de "Id" estaba mal! Espero que esto ayude a alguien.¡Puede estar recibiendo este error solo porque pone una propiedad inexistente!

0

Estaba teniendo un problema similar al enlazar columnas a una rejilla Telerik MVC. Tenía una propiedad de Id en mi clase de ViewModel. (Inspirado por la respuesta de Chris anterior) Lo renombré a XxxId y el problema desapareció. Me parece recordar algo sobre MVC haciendo algo especial para las propiedades de Id.

0

que tenía un problema de aspecto similar pero con Rx y en mi caso la adición de

using System; 

ayudó. FWIW

En ocasiones, perder el tiempo con los métodos de extensión que faltan es demasiado molesto.

1

tuve el mismo problema con MVC 3 de afeitar tal vez alguien tiene el mismo así que quiero mostrar cómo solucionarlo en mi stuation

List<Taksit> lst = db.Taksit.Where(y => y.OgrenciId.Equals(Convert.ToInt32(list[0].Id))).ToList(); 

i intentado utilizar contiene, pero de ahí OgrenciId es int i sale el error mencionado aquí así que mediante el uso de iguales se resuelve el problema

2

Me encontré con esto y encontré una solución diferente. Estaba usando var query = context.Contacts.Where(c => c.FullNameReverse == "TingTong"); y obtengo el error mencionado. El error fue que estaba usando el método FullNameReverse() como propiedad FullNameReverse. Perdido el()!!!

85

En mi caso que faltaba

using System.Data.Entity;

+0

Tuve "using System.Data.EntityClient;" Y, aunque está allí, está atenuado/innecesario. System.Data.Entity solo (sin el "Cliente") no está permitido. –

+1

Usted, señor Miguel, es un genio. ¡Gracias! – oHoodie

0

En mi caso tuve este error al intentar utilizar Incluir en clientContext.Load en una aplicación Sharepoint 2013.

yo había incluido biblioteca cliente Sharepoint así:

using SP = Microsoft.SharePoint.Client; 

para fijar, además de que también añadió que sin el namespacing:

using Microsoft.SharePoint.Client; 
using SP = Microsoft.SharePoint.Client; 
0

Mi problema implicado el formato:

.Columns(columns => { 
    columns.Bound(p => p.Id).Filterable(false); 
    columns.Bound(p => p.Name).Width(250); 
    ... 

Todo p.Whatever tenía este error en él.

Este fue un proyecto que usa MVC, y encontré que mi problema era tener "public static int" o "public static string" en estas variables (Id, Name, etc.) en mi modelo. Cuando eliminé "static" en todas las variables de mi modelo, ya no recibí el error. Me estaba volviendo loco durante aproximadamente un día ...

0

Tuve este problema en una versión ligeramente diferente.
Si llama a un método (estático) desde el interior de su lambda, verifique su tipo de devolución. Si el tipo de devolución debe ser un IEnumerable (que a menudo es cierto al usar lambdas) pero devuelve un objeto, obviamente tiene un problema.

7
using System.Linq; 
using System.Data.Entity; 
0

Simplemente pruebe usando System.Linq; Creo que le ayudará a resolver estos problemas.

Cuestiones relacionadas