Where子句使用lambda属性选择器

本文关键字:属性 选择器 lambda 子句 Where | 更新日期: 2023-09-27 18:11:09

我希望能够通过在我从数据库中得到的对象列表中找到它的匹配来刷新对象。我可以用反射做到这一点-但我确信必须有一种方法在Where子句中获得属性选择器。

这就是我想说的……

MyObject = GetRefreshedObject(MyObject, RefreshedObjects, () => ID);

但是我有点被方法困住了!

    public static TE GetRefreshed<TE, P>(TE entity, IEnumerable<TE> refreshed, Expression<Func<TE, P>> selector) where TE : class
    {
        if (entity == null) return null;
        return refreshed.Where(x => x.[Selector == entity.Selector]).FirstOfDefault();
        //The square bracket bits obviously don't work but hopefully show what I'm trying to achieve!
    }

Where子句使用lambda属性选择器

如果您只是使用Lambdas和IEnumerables,您真的需要表达式解析吗?本机使用lambda。这将需要对调用代码进行轻微更改:

var refreshedObject = GetRefreshedObject(MyObject, RefreshedObjects, x => x.ID);

方法实现将是:

public static TE GetRefreshed<TE, P>(TE entity, IEnumerable<TE> refreshed, Func<TE, P> selector)
{
  P myObjectId = selector(entity);
  return refreshed.FirstOrDefault(refresh => selector(refresh).Equals(myObjectId));
}