DB에서 회의실 목록을 가져 오는 간단한 기능이 있습니다. 다음 기능을 사용하고 있습니다 :일반 매개 변수가있는 LINQ
public List<ConferenceRoom> RunRoomQuery<T1>(T1 fieldValue, Func<ConferenceRoom, T1, bool> predicate)
{
var confRooms = _dataContext.ConferenceRooms.Where(delegate(ConferenceRoom c)
{
return predicate(c, fieldValue);
});
return confRooms.ToList();
}
잘 작동합니다. 그러나 당신이주의했던 것처럼, 나는 "ConferenceRoom"타입을 지나가고있다. 대신에, 나는 그것이 더 일반적인하고 같이 T2를 전달하고 싶습니다 :
public List<T2> RunRoomQuery<T1,T2>(T1 fieldValue, Func<T2, T1, bool> predicate)
{
var confRooms = _dataContext.ConferenceRooms.Where(delegate(T2 c)
{
return predicate(c, fieldValue);
});
return confRooms.ToList();
}
confRoom.ToList을() 중 하나 그것에 대해 행복하지 않다 "여기서"컴파일하지 않습니다.
질문 : 왜? 내가 왜 그럴 수 있지? 다음은 오류입니다.
error CS0305: Using the generic method 'ConferenceDB.ConferenceDb.RunRoomQuery<T1,T2>(T1, System.Func<T2,T1,bool>)' requires 2 type arguments
C:\Projects\ConferenceDB\ConferenceDB.cs(82,25): (Related location)
C:\Projects\ConferenceDB\ConferenceDB.cs(69,27): error CS0305: Using the generic method 'ConferenceDB.ConferenceDb.RunRoomQuery<T1,T2>(T1, System.Func<T2,T1,bool>)' requires 2 type arguments
왜?
일반적인 유형은 'ConferenceRooms' 컬렉션과 호환되어야합니다. '.ToList()'는 쿼리에서 반환 된 항목이 'T2'와 같지 않으면 작동하지 않습니다. '.Where()'가'null'을 반환하지 않도록 조심해야합니다. –