无法将lambda表达式转换为type,因为它不是委托

时间:2017-08-23 17:08:26

标签: c# lambda delegates

我正在尝试创建列表索引。但是,由于某种原因,我不断收到以下错误:

  

无法将lambda表达式转换为' TEntity'因为它不是   代表

我在这个问题上尝试了很多,但我尝试过的所有东西似乎都没有用。我已经尝试了从创建演员到确保我有正确的Using陈述

的所有内容

这是专门抛出错误的行

int index = items.IndexOf(x => ID(x) == id.Value);

正在调用此方法

protected Int32? ID(TEntity entity)
{
    return entity.As<dynamic>().__id;
}

作为参考,其余适用的内容在此处。

[Element("<div/>"), Editor, IdProperty("__id")]
public abstract class GridEditorBase<TEntity> : EntityGrid<TEntity>, ISetEditValue, IGetEditValue
    where TEntity : class, new()
{
    private int nextId = 1;

    public GridEditorBase(jQueryObject container)
        : base(container)
    {
    }

    protected Int32? ID(TEntity entity)
    {
        return entity.As<dynamic>().__id;
    }

    protected virtual void Save(ServiceCallOptions opt, Action<ServiceResponse> callback)
    {
        SaveRequest<TEntity> request = opt.Request.As<SaveRequest<TEntity>>();
        TEntity row = Q.DeepClone(request.Entity);
        int? id = row.As<dynamic>().__id;
        if (id == null)
            row.As<dynamic>().__id = nextId++;

        if (!ValidateEntity(row, id))
            return;

        List<TEntity> items = view.GetItems().Clone();

        if (id == null)
            items.Add(row);
        else
        {                
            int index = items.IndexOf(x => ID(x) == id.Value);
            items[index] = Q.DeepExtend<TEntity>(new TEntity(), items[index], row);
        }

        SetEntities(items);
        callback(new ServiceResponse());
    }

2 个答案:

答案 0 :(得分:0)

您需要将项目传递给IndexOf,您可以这样做:

int index = items.IndexOf(items.FirstOrDefault(x => ID(x) == id.Value));

答案 1 :(得分:0)

也许您缺少这些参考文献之一,请尝试添加它们

使用System.Linq;

使用System.Data.Entity;