2016-12-06 2 views
-1

Как обобщить выражение y.Aaa == x.Aaa следующим способом?Выражение параметров типа, проходящих от типизированного параметра?

void Delete<T>(List<T> db, List<T> n, Func<bool> cond) // typed cond 
{ 
    var deleted = db 
     .Where(x => !n.Any(y => y.Aaa == x.Aaa)) // Each T may have different property name? 
     .ToList(); 
    //.... 
} 

Если этого не сделать. Как насчет Delete(db, n, db => db.Aaa, n => n.Aaa)? Или я должен был сделать Delete(db, n, "Aaa")

+0

Важно знать, используете ли вы LINQ с базой данных (например, инфраструктура сущности или linq для SQL-запроса). – Evk

+0

да, я использую Linq с базой данных. – ca9163d9

+0

@ dc7a9163d9 Затем не записывайте код, в котором вы передаете «Список », потому что это список в памяти, а не 'IQueryable ', представляющий операцию DB. – Servy

ответ

1

Я думаю, я следую за то, что вы после этого здесь .. Вы хотели бы общий метод удаления, такие как ...

void Delete<T>(List<T> db, List<T> n, Func<T, T, bool> cond) // typed cond 
{ 
    var deleted = db 
     .Where(x => !n.Any(y => cond(x, y))) // Each T may have different property name? 
     .ToList(); 
    //.... 
} 

... и мы могли бы назвать это как. ..

Delete(db, n, (x, y) => y.Aaa == x.Aaa) 

в основном это делает cond «равенство компаратор» и мы можем использовать его внутри Any().

Смежные вопросы