如何以流畅的语法编写此LINQ查询?

时间:2016-08-19 06:16:03

标签: c# linq

我有一个'GetTransactions'方法,它返回一个类型为

的对象
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 个答案:

答案 0 :(得分:3)

你需要在where语句中使用lambda的参数:

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

(注意t =>部分定义新的表达式范围,而不是直接尝试访问变量&#34; t&#34;)

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

我还建议使用我在答案中使用的多行布局来更好地理解查询,并发现潜在的问题,例如@nvoigt提到的缺失括号问题。