我希望能够在我的类中启用 LinQ 查询语法。 我认为查询语法会被转换为方法语法,例如:
var query = from p in new Class1<Product>()
where p.Id == "1000"
select p
被翻译成:
var query = new Class1<Product>().Where(p => p.Id == "1000").Select(p => p);
那么我已经将我的Class1
实现为:
public class Class1<T>
{
public Class1<T> Where(Expression<Func<T, bool>> expression)
{
return this;
}
public Class1<T> Select<TResult>(Func<T, TResult> expression)
{
return this;
}
}
我已经使用以下代码进行了测试:
static void Main(string[] args)
{
var query = from p in new Class1<Product>()
where p.Id == "1000"
select p;
}
我注意到Select
方法没有被调用,但是如果我从LinQ中删除where
子句,Select
就会被调用:
static void Main(string[] args)
{
var query = from p in new Class1<Product>()
// where p.Id == "1000" -> commenting that Select method is called
select p;
}
有人知道为什么吗?
这里有一个代码片段,你可以在 https://dotnetfiddle.net/JgxKG9 上测试它。
C:\Program Files (x86)\Microsoft Visual Studio <version>\VC#\Specifications\1033
找到它们。不确定在VS 2017上是否有所更改。 - Jcl