Ошибка Linq To Entity при проверке записи, если она существует в базе данных - PullRequest
2 голосов
/ 05 августа 2011

Я получаю сообщение об ошибке при попытке использовать запрос linqsql:

LINQ to Entities не распознает метод 'System.String get_Item (System.String) ', и этот метод не может быть переведен в магазинное выражение.

Код:

 [HttpPost]
    public ActionResult CreateGiftVoucher(FormCollection collection)
    {
        IVoucherRepository voucherResp = new VoucherRepository();
        IQueryable<Voucher> getVoucher = voucherResp.GetAllVouchers();

        //if (getVoucher.Where(x => x.Code == collection["Code"]).Count() > 0) {
        if (getVoucher.Any(r => r.Code == collection["Code"]))
        {
            ModelState.AddModelError("Code", "Code Already Exists");
        } return View(); }

Репозиторий ваучеров

 public IQueryable<Voucher> GetAllVouchers()
    {
        return entity.Vouchers;
    }

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Ваш запрос Linq переводится в SQL, а затем выполняется в базе данных. Но для collection["Code"] нет эквивалента SQL, поэтому запрос не может быть переведен в SQL, поэтому возникает ошибка. В этом случае исправить несложно: просто поместите результат collection["Code"] в локальную переменную вне запроса.

    string code = collection["Code"];
    if (getVoucher.Any(r => r.Code == code))
    {
        ModelState.AddModelError("Code", "Code Already Exists");
    }
1 голос
/ 05 августа 2011

LINQ для сущностей не может оценить коллекцию выражений ["Код"].Попробуйте оценить это выражение перед запросом:

string code = collection["Code"];
if (getVoucher.Any(r => r.Code == code))
{
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...