Если у вас есть список объектов со свойствами, как показано в вашей таблице, вы можете найти книги с одинаковыми названиями, имеющие конфликтующие даты, используя что-то вроде этого:
(Не проверял этот код, поэтому могут быть ошибки при опечатке.)
var collisions = collection
.Join(collection, x => x.ref_Name, y => y.ref_Name,
(x, y) => new {
ID_x = x.ID,
ID_y = y.ID,
ref_id = x.ref_id,
ref_Name = x.ref_Name,
Borrow_Date_x = x.Borrow_Date,
Borrow_Date_y = y.Borrow_Date,
Return_Date_x = x.Return_Date,
Return_Date_y = y.Return_Date
}
)
.Where( z => (z.Return_Date_x > z.Borrow_Date_y && z.Borrow_Date_x < z.Return_Date_y))
.Where( z => z.ID_x != z.ID_y);
Возможно, вы получите дубликаты результатов. (т.е. ID 1 и 3 и ID 3 и 1)