Подтвердить что ты не робот

Entity Framework. Невозможно преобразовать лямбда-выражение для ввода "string", потому что это не тип делегата

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

Случай 1, 2, 3, 4... Проекты:
RivWorks.dll
RivWorks.Service.dll
RivWorks.Alpha.dll

Образцы (все эти работы):
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();
}

и т.д.

Случай "странность":
RivWorks.Web.Service.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();
    ...
}

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

Любые идеи, что может вызвать это?

4b9b3361

Ответ 1

Для тех, кто заинтересован в исходе:
Я пропустил простой оператор Using во главе моего кода.

using System.Linq;

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

Ответ 2

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

using System.Data.Entity;

Ответ 3

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

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>);

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

Ответ 4

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

Ответ 5

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

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

Надеюсь, это немного сэкономит время.

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

using System;

помог. FWIW

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

Ответ 10

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

Я включил клиентскую библиотеку Sharepoint так:

using SP = Microsoft.SharePoint.Client;

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

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

Ответ 11

В моей проблеме использовался формат:

.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 и т.д.) в моей модели. Когда я удалял "статические" во всех моих переменных модели, я больше не получил ошибку. Заводил меня с орехами около дня...

Ответ 12

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

Ответ 13

Просто попробуйте используя System.Linq; Я думаю, это поможет вам разобраться в этом.