I am not a nhibernate user, but, analyzing all the information that we have about the script here, I have a strong feeling that you cannot answer.
You map the value contained in this class to a single value in db.
To resolve the query on its fragments, he would have to understand how all these pieces of data in the Name class are associated with the full value.
That would mean understanding what C # custom code does.
update 1:
The above answer is that all this is automatically generated for you. And using the exact request you mentioned there.
You can definitely solve the problem suggested by @cs. That is, by defining a user-defined function that does what you want and matching it in nHibernate.
At least this will allow you to do something like:
session.QueryOver<Person>() .Where(p => session.PersonLastName(p) == "Doe") .List();
Another way would be to define an extension method that will translate to what you want by implementing it, as in this article: http://fabiomaulo.blogspot.com/2010/07/nhibernate-linq-provider-extension.html
Usage will then look like this:
session.QueryOver<Person>() .Where(p=> p.Name.LastNameExt() == "Doe")
Finally, I'm not sure if it is possible to map helper properties for user-defined functions for each, so that your request can remain unchanged, for example:
session.QueryOver<Person>() .Where(p => p.Name.LastName == "Doe") .List();
Not in all cases you go from data concatenation to data analysis. You are the only one who knows whether it really buys something, and also saves the properties separately.