Entity Framework-не удается преобразовать лямбда-выражение В тип 'string', поскольку это не тип делегата


Я использую Entity Framework в своем коде на C# . Я сталкиваюсь с неожиданной странностью и ищу предложения.

корпус 1, 2, 3, 4... Проекты:
RivWorks.dll
RivWorks.Услуга.dll
RivWorks.Альфа.dll

образцы (все эти работы):
RivWorks.Альфа.dll:

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

RivWorks.Услуга.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

случае "странность":
RivWorks.Сеть.Услуга.dll (проект WCF)
Содержит те же ссылки, что и другие проекты.

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();
    ...
}

Я получаю эту ошибку времени компиляции (слово " где " выделено в моем редакторе):
не удается преобразовать лямбда-выражение В тип 'string', потому что это не тип делегата

есть идеи, что могло бы вызвать это?

14 70

14 ответов:

для тех, кто заинтересован в исходе:
Мне не хватало простого оператора Using в начале моего кода.

using System.Linq;

Это будет исправлено.

в моем случае он отсутствует

using System.Data.Entity;

using System.Linq;
using System.Data.Entity;

В моем случае, у меня был

Using System.Linq;

но я пропустил && после пункта where.

Плохой Код:

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

правильный код ( без ошибок ):

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

Я надеюсь, это сэкономит кому-то немного времени.

я боролся с этим в шаблоне сетки Telerik в виде бритвы около часа. В моем случае это:

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

должно быть:

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

случай на " Id " был неправильным! Надеюсь, это кому-то поможет. Вы можете получить эту ошибку только потому, что вы положили несуществующее свойство!

я наткнулся на это и нашел другое исправление. Я использовал var query = context.Contacts.Where(c => c.FullNameReverse == "TingTong"); и получение упомянутой ошибки. Ошибка была в том, что я использовал метод FullNameReverse() в собственность FullNameReverse. Пропустил ()!!!

У меня была та же проблема с MVC 3 razor может быть, у кого-то есть то же самое, поэтому я хочу показать, как это исправить в моем stuation

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

Я пытался использовать contains но, следовательно, OgrenciId-это int я получаю ошибку, упомянутую здесь, поэтому с помощью equals проблема решена

нить немного старая, но я только что столкнулся с этим, и ничего в сети не было ответом. Один сайт упомянул, что привело к ответу, который был проблемой типа данных, но, к сожалению, я не могу найти его снова, поэтому я публикую свое решение здесь. Может быть, какой-нибудь будущий искатель извлекет из этого пользу.

Оригинал: интерфейс IQueryable тест = от Р в записях, где r.Record_ID == 100 выберите R;

где записи-это IQueryable результат предыдущего LINQ expresson.

исправление заключается в приведении записей: (IQueryable)записи в выражении. Найдя его,это имеет смысл. Записи не набираются, поэтому LINQ не имеет понятия, если R. Record_ID допустим. Путаница-это сообщение об ошибке, которое появляется по всей сети в десятках мест, почти в каждом случае решение является одним из двух отсутствующих предложений using. Один или два я нашел, что не были проблемой использования, они не потрудились опубликовать то, что исправлено оно.

надеюсь, что это помогает...

У меня была аналогичная проблема привязки столбцов к сетке Telerik MVC. У меня было свойство Id в моем классе ViewModel. (Вдохновленный ответом Криса выше) я переименовал его в XxxId, и проблема ушла. Кажется, я вспоминаю что-то о том, что MVC делает что-то особенное для свойств Id.

У меня была похожая проблема, но с Rx и в моем случае добавлять

using System;

помогло. Чистки рядов

беспорядок с этими методами расширения отсутствует слишком раздражает иногда.

в моем случае у меня была эта ошибка при попытке использовать Include в clientContext.Загрузите приложение Sharepoint 2013.

Я включил клиентскую библиотеку Sharepoint следующим образом:

using SP = Microsoft.SharePoint.Client;

исправить, кроме того, я также добавил его без пространства имен:

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

моя проблема связана с форматом:

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

каждый p. что бы ни было с этой ошибкой на нем.

Это был проект с использованием MVC, и я обнаружил, что моя проблема заключалась в том, что "public static int" или "public static string" для этих переменных (Id, Name и т. д.) в моей модели. Когда я удалил "статические" на все мои переменные модели, я больше не получил ошибку. Это сводило меня с ума около дня...

У меня была эта проблема в немного другой версии.
Если вы вызываете (статический) метод из своей лямбды, проверьте его возвращаемый тип. Если возвращаемый тип должен быть IEnumerable (что часто верно при использовании lambdas), но вы возвращаете объект, очевидно, у вас есть проблема.

Просто Попробовать использование системы.В LINQ; Я думаю, что это поможет Вам разобраться в этом вопросе.