2016-08-19 79 views
1

我有一个 'GetTransactions' 方法,返回类型的对象:如何用流利的语法编写这个LINQ查询?

IList<ApplicationTransaction> 

如果这是一个ApplicationTransaction:

public partial class ApplicationTransaction 
{ 
    public int TransactionId { get; set; } 
    public int ApplicationId { get; set; } 
    public string Event { get; set; } 
    public System.DateTime CreatedOn { get; set; } 

    public virtual Application Application { get; set; } 
} 

如何转换这个LINQ查询:

return (from t in GetTransactions().OfType<ApplicationTransaction>() 
     where t.Event == transactionType.ToString() 
     select t).FirstOrDefault(); 

流利的语法?

这不起作用 - 我不理解什么?

return GetTransactions().OfType<ApplicationTransaction>().Where(t.Event == transactionType.ToString().FirstOrDefault(); 
+1

您可以使用LINQPad(或Reflector)来查看其流畅的味道。 –

回答

3

您需要参数拉姆达在哪里声明:

return GetTransactions() 
    .OfType<ApplicationTransaction>() 
    .Where(t => t.Event == transactionType.ToString()) 
    .FirstOrDefault(); 

(注意:t =>部分,其中定义了一个新的表达范围,而不是直接试图访问一个变量“t”)

如果您选择整个实体,则不需要单独选择。

我还建议使用我在答案中使用的多行布局,以更好地理解查询并捕获潜在的问题,如缺少的圆括号问题@nvoigt提到。

+2

他也错过了正确设置的关闭''''。也许很好提。 – nvoigt

+1

Doh!谢谢塞达特 –

+0

@nvoigt好抓!我添加了一个关于它的注释。 –