the obsolete warning is used in this case to notify you that the given expression is not executed on the server side, but on the client, which could have a performance impact.
The better way to express the query is like follows:
var ur = os.Extent<UserRole>().Where(c => c.UserID == id).SingleOrDefault();
The reason for this behavior is that we currently do not push down the filter expression of SingleOrDefault as an additional Where expression; a future release will do this correctly and then the obsolete warning will be gone.
the Telerik team
, the state of the art learning tool for Telerik products.