【发布时间】:2010-12-07 03:48:40
【问题描述】:
谁能通过提供一个非常基本的示例来解释我如何在 C# 中使用 (1) iQueryable (2) 表达式树?两者不相关,我不想提出两个单独的问题,而是希望在一个问题中消除我的疑问。
非常感谢。
【问题讨论】:
标签: c# lambda expression-trees iqueryable
谁能通过提供一个非常基本的示例来解释我如何在 C# 中使用 (1) iQueryable (2) 表达式树?两者不相关,我不想提出两个单独的问题,而是希望在一个问题中消除我的疑问。
非常感谢。
【问题讨论】:
标签: c# lambda expression-trees iqueryable
Expression trees 制作非常简单:
Expression<Func<int,int,int>> addExp = (a,b) => a + b;
或
var paramA = Expression.Parameter(typeof(int), "a");
var paramB = Expression.Parameter(typeof(int), "b");
Expression<Func<int,int,int>> addExp = Expression.Lambda<Func<int,int,int>>(
Expression.Add(paramA, paramB),
paramA,
paramB);
构建 IQueryable 提供程序相当困难。但是,Matt Warren has a very indepth series that walks you through creating an IQueryable provider.
【讨论】:
我通常不喜欢仅仅链接东西,但这是一个更复杂的话题。我建议观看此视频:
http://channel9.msdn.com/shows/Going+Deep/Erik-Meijer-and-Bart-De-Smet-LINQ-to-Anything/
Erik 很好地解释了这一点,并给出了一个简洁的 Linq to Simpsons 示例。
【讨论】:
Expression<Func<T, string, PropertyInfo>> expression = (obj, str) =>
obj.GetType()
.GetProperty(
obj.GetType()
.GetProperties()
.ToList()
.Find(prop =>
prop.Equals(str, StringComparison.OrdinalIgnoreCase).Name.ToString());
var obj = expression.Compile()(rowsData.FirstOrDefault(), sortIndex);
【讨论】: