C# 特定字段的nHibernate Select语句
我使用nHibernate和c从数据库中获取记录或字符串列表,如下面的前几行代码所示。这个很好用。我要做的是从记录中选择几个特定字段,而不是整个记录。我尝试过各种技术,但似乎找不到任何关于如何做到这一点的例子。有人能看一下下面的代码,如果我走错了方向,请告诉我 谢谢C# 特定字段的nHibernate Select语句,c#,nhibernate,select,C#,Nhibernate,Select,我使用nHibernate和c从数据库中获取记录或字符串列表,如下面的前几行代码所示。这个很好用。我要做的是从记录中选择几个特定字段,而不是整个记录。我尝试过各种技术,但似乎找不到任何关于如何做到这一点的例子。有人能看一下下面的代码,如果我走错了方向,请告诉我 谢谢 // THIS WORKS - Retrieve a list of my records from the table. Ilist<MyClass> classList = db.Session.CreateQue
// THIS WORKS - Retrieve a list of my records from the table.
Ilist<MyClass> classList = db.Session.CreateQuery("FROM MyTable WHERE t.Name='AName'").List<MyClass>();
// THIS WORKS - Retrieve a list of strings from the table
IList<string> stringList = db.Session.CreateQuery("SELECT c.ConstName FROM MyTable c WHERE c.Name='AName'").List<string>();
// THIS DOES NOT WORK (RUN-TIME ERRORS). HOW CAN I SELECT ONLY A FEW FIELDS FROM EACH RECORD?
// This class contains only the records I want.
public struct MyClassB
{
private string Name;
private string Address;
public string Name
{
get { return Name; }
set { Name = value; }
}
public string Address
{
get { return Address; }
set { stationName = Address; }
}
}
IList<MyClassB> classListB = db.Session.CreateQuery("SELECT t.Name, t.Address FROM MyTable t WHERE t.Name='AName'").List<MyClassB>();
查看别名TobeanResultTransformer-用法已演示。查看别名TobeanResultTransformer-用法已演示。您试图将无效的匿名类型强制转换到MyClassB中。而是为MyClassB创建一个映射 或者直接使用:
var specificFields = db.Session.CreateQuery("SELECT t.Name, t.Address FROM MyTable t WHERE t.Name='AName'").List();
var specificFields = db.Session.CreateQuery("SELECT t.Name, t.Address FROM MyTable t WHERE t.Name='AName'").List<Tuple<string,string>>();
列表中的对象将具有两个属性。您试图将无效的匿名类型强制转换到MyClassB中。而是为MyClassB创建一个映射 或者直接使用:
var specificFields = db.Session.CreateQuery("SELECT t.Name, t.Address FROM MyTable t WHERE t.Name='AName'").List();
var specificFields = db.Session.CreateQuery("SELECT t.Name, t.Address FROM MyTable t WHERE t.Name='AName'").List<Tuple<string,string>>();
列表中的对象将具有两个属性。只要类具有构造函数,您就应该能够执行以下操作:
IList<MyClassB> classListB = db.Session.CreateQuery("SELECT new MyClassB(t.Name, t.Address) FROM MyTable t WHERE t.Name='AName'").List<MyClassB>();
只要您的类有一个构造函数,您就应该能够执行以下操作:
IList<MyClassB> classListB = db.Session.CreateQuery("SELECT new MyClassB(t.Name, t.Address) FROM MyTable t WHERE t.Name='AName'").List<MyClassB>();
你能详细说明地图部分吗?这是可行的,我最终得到了一组对象。我想我可以通过执行一个特定的字段[record][field]来访问这些字段,但是编译器不允许对object类型进行索引。映射部分:您只需要为MyClassB创建一个映射,该映射指向MyClassA使用的同一个表,然后只映射MyClassB的两个属性和Identiy部分。请确保不允许对MyClassB进行更新和删除,因为它没有所有的行…抱歉,但是您没有向OP展示如何使用他们提供的模型进行更新和删除。您可以详细说明映射部分吗?这是可行的,我最终得到了一组对象。我想我可以通过执行一个特定的字段[record][field]来访问这些字段,但是编译器不允许对object类型进行索引。映射部分:您只需要为MyClassB创建一个映射,该映射指向MyClassA使用的同一个表,然后只映射MyClassB的两个属性和Identiy部分。请确保不允许对MyClassB进行更新和删除,因为它没有所有行…抱歉,但您没有向OP展示如何使用他们提供的模型进行更新。这是真的强制转换还是需要结果转换器?@TimothyGonzalez这是真的强制转换,请在此处查看完整的工作示例:这是真的强制转换还是需要结果转换器?@TimothyGonzalez这是真的强制转换,请在此处查看完整的工作示例: