像Func一样使用Expression

时间:2018-04-22 16:18:05

标签: c# expression

我需要使用包含源和目标的表达式来获取选择器,比如mapper(我需要它用于EF)。

public class Region
{
    public int RegionId { get; set; }
    public string RegionName { get; set; }
}

var country = new List<Region> { new Region { RegionId = 21, RegionName = "MyRegion" } };
Expression<Func<Region, string>> exp = (x => x.RegionName);
country.Select(s => exp(s));
// exp(s) gives compilation error (Method name expected)

有可能得到它吗?

1 个答案:

答案 0 :(得分:0)

想象一下:

var items = new List<int>();
Expression<Func<int, int>> selector = (x => x);

您无法执行此操作,因为它是Expression

selector(x); // will not work

但这样可行,因为您正在编译表达式,所以现在可以调用Func<int, int>

selector.Compile()(1);

如果你想在IQueryable中使用表达式,你可以这样做:

items.AsQueryable().Select(x => selector);
// Or simply
items.AsQueryable().Select(selector);

所以在你的情况下,它应该是:

country.Select(exp);