Предопределенные выражения в синтаксисе запроса LINQ

Можно ли использовать ранее определенное выражение в выражениях LINQ с синтаксисом запроса? Я создал надуманный пример, чтобы проиллюстрировать мой вопрос.

var tabletTypes = new List<int> { 2, 3 };
//I want to use this expression many times
Expression<Func<Computer, bool>> isTablet = comp => tabletTypes.Contains(comp.Type);

var computers = db.Computers;
var producers = db.Producers;

//I know how to use the expression in fluent syntax
IQueryable<Producer> tabletProducers = computers
                               .Where(isTablet)
                               .Join(producers, 
                                     comp => comp.ProducerId, 
                                     producer => producer.Id, 
                                     (comp, producer) => producer);

//How can I use the expression in query syntax
IQueryable<Producer> tabletProducers2 = from c in computers
                                        join p in producers
                                            on c.ProducerId equals p.Id
                                        where /*How can I use isTablet here?*/
                                        select p;


public class Producer
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Computer
{
    public int Id { get;set; }
    public int Type { get; set; }
    public int ProducerId { get; set; }
}

Я использую C# 5 и EF 5.

1 ответ

Вы можете просто использовать where isTablet.Compile()(c), Вы можете кэшировать скомпилированную версию.

Другие вопросы по тегам