Как создать функцию с помощью Expression linq - PullRequest
2 голосов
/ 24 марта 2012

У меня есть следующий класс

public class ProdutoTipo : IAuditable
{
    public Guid ID { get; set; }

    public string Nome { get; set; }
    public string MiniNome { get; set; }
    public string Descricao { get; set; }
    public string Link { get; set; }
    public int? Ordem { get; set; }

    public virtual Foto ImagemExibicao { get; set; }
    public virtual ICollection<ProdutoCategoria> Categorias { get; set; }

    public DateTime CreatedAt { get; set; }
    public string CreatedBy { get; set; }
    public DateTime? UpdatedAt { get; set; }
    public string UpdatedBy { get; set; }

    public bool PaginaInicial { get; set; }

    public ProdutoTipo() { ID = Guid.NewGuid(); }
}

Мне нужна функция, которая выполняет поиск в хранилище и возвращает true или false
Но этот поиск может использовать любое поле класса!

Насколько я прибыл

public bool Existe<TProperty, TComparer>(Expression<Func<ProdutoTipo, TProperty>> entityExpression, TComparer valor)
{
    return Repository.ProdutoTipos.Any(p => /*entityExpression == valor ?????*/);
}

Хотел бы использовать такую ​​функцию ...

Existe(p => p.Nome, "Value to comparer!");

Спасибо всем!

Ответы [ 2 ]

4 голосов
/ 24 марта 2012

Я думаю, что вы ищете

Func<ProdutoTipo, TProperty> getter = entityExpression.Compile();
Repository.ProdutoTipos.Any(p => getter(p).Equals(valor)); 

Но вы могли бы также сделать это:

public bool Existe<TProperty, TComparer>(Expression<Func<ProdutoTipo, bool>> expression)  
{  
    return Repository.ProdutoTipos.Any(expression);  
}

И позвонить:

Existe(p => p.Nome == "Value to comparer!");  
0 голосов
/ 24 марта 2012

Попробуйте:

public bool Existe<TProperty, TComparer>(Expression<Func<ProdutoTipo, TProperty>> entityExpression, TComparer valor)
{
    entityExpression.Compile()(Repository.ProdutoTipos);
}
...