C# 如何仅查询RealmObject的特定属性?
例如,我有一个对象:C# 如何仅查询RealmObject的特定属性?,c#,xamarin,realm,C#,Xamarin,Realm,例如,我有一个对象: public class person : RealmObject { public string firstname { get; set; } public string secondname { get; set; } public int age { get; set; } public string address { get; set; } } 如何进行查询,只给我一个地址或名字+第二个名字的列
public class person : RealmObject {
public string firstname { get; set; }
public string secondname { get; set; }
public int age { get; set; }
public string address { get; set; }
}
如何进行查询,只给我一个地址或名字+第二个名字的列表
或者名字和年龄。您可以尝试以下方法:
var realm = Realm.GetInstance();
var addresses = realm.All<person>()
.ToList()
.Select(person => person.address)
.ToList();
var firstAndSecondNames = realm.All<person>()
.ToList()
.Select(person => new
{
FirstName = person.firstName,
SecondName = person.secondName
})
.ToList();
var realm=realm.GetInstance();
var addresses=realm.All()
托利斯先生()
.Select(person=>person.address)
.ToList();
var firstAndSecondNames=realm.All()
托利斯先生()
.选择(人员=>新建)
{
FirstName=person.FirstName,
SecondName=person.SecondName
})
.ToList();
您可以尝试以下方法:
var realm = Realm.GetInstance();
var addresses = realm.All<person>()
.ToList()
.Select(person => person.address)
.ToList();
var firstAndSecondNames = realm.All<person>()
.ToList()
.Select(person => new
{
FirstName = person.firstName,
SecondName = person.secondName
})
.ToList();
var realm=realm.GetInstance();
var addresses=realm.All()
托利斯先生()
.Select(person=>person.address)
.ToList();
var firstAndSecondNames=realm.All()
托利斯先生()
.选择(人员=>新建)
{
FirstName=person.FirstName,
SecondName=person.SecondName
})
.ToList();
一般来说,选择当前不受支持
只要您的Select
正在投影一个RealmObject
,它就被支持,但您要求的投影将类型从RealmObject
更改为另一种类型,而这是不受支持的:
如果确实需要断开对象与领域数据库的连接,可以将基本查询带到列表(.ToList
),然后对结果执行选择投影:
realm.All<Dog>().ToList().Select(dog => dog.Name);
然后,您可以执行以下操作:
var realm = Realms.Realm.GetInstance("stackoverflow.db");
var me = new person() { firstname = "Sushi", secondname = "Hangover", age = 99, address = "Local sushi bar" };
realm.Write(() => realm.Add<person>(me));
var user = realm.All<person>().Where((person p) => p.firstname == "Sushi" && p.secondname == "Hangover").FirstOrDefault();
Console.WriteLine($"{user.name} is {user.age} years old and is currently at {user.address}");
更新2:
如果您希望遍历返回的RealmObjects集合:
var users = realm.All<person>().Where((person p) => p.age < 40);
Console.WriteLine($"There are {users.Count()} users under 40 years of age and they are located at:");
foreach (var user in users)
{
Console.WriteLine($"{user.firstname} is currently at {user.address}");
}
var users=realm.All(),其中((个人p)=>p.age<40);
Console.WriteLine($”有{users.Count()}个40岁以下的用户,他们位于:”;
foreach(用户中的var用户)
{
Console.WriteLine($“{user.firstname}当前位于{user.address}”);
}
一般来说,选择当前不受支持
只要您的Select
正在投影一个RealmObject
,它就被支持,但您要求的投影将类型从RealmObject
更改为另一种类型,而这是不受支持的:
如果确实需要断开对象与领域数据库的连接,可以将基本查询带到列表(.ToList
),然后对结果执行选择投影:
realm.All<Dog>().ToList().Select(dog => dog.Name);
然后,您可以执行以下操作:
var realm = Realms.Realm.GetInstance("stackoverflow.db");
var me = new person() { firstname = "Sushi", secondname = "Hangover", age = 99, address = "Local sushi bar" };
realm.Write(() => realm.Add<person>(me));
var user = realm.All<person>().Where((person p) => p.firstname == "Sushi" && p.secondname == "Hangover").FirstOrDefault();
Console.WriteLine($"{user.name} is {user.age} years old and is currently at {user.address}");
更新2:
如果您希望遍历返回的RealmObjects集合:
var users = realm.All<person>().Where((person p) => p.age < 40);
Console.WriteLine($"There are {users.Count()} users under 40 years of age and they are located at:");
foreach (var user in users)
{
Console.WriteLine($"{user.firstname} is currently at {user.address}");
}
var users=realm.All(),其中((个人p)=>p.age<40);
Console.WriteLine($”有{users.Count()}个40岁以下的用户,他们位于:”;
foreach(用户中的var用户)
{
Console.WriteLine($“{user.firstname}当前位于{user.address}”);
}
查询?内存中是否有对象列表,并且要查询此列表?你想从数据库中获取这些数据吗?当然是从领域数据库。你如何访问你的数据库?使用ADO.NET还是ORM?如果你使用ORM,你使用哪种ORM?不确定。我只使用了领域库和以下语法:如果您曾经使用过LINQ,那么使用领域获取数据的方法非常简单。请看我的答案。如果您还没有,尽管您会通过阅读代码(LINQ的简单性和可读性)来理解,但我鼓励您阅读LINQ,因为它是C的一部分,任何C开发人员都应该拥有它。它节省了生命:)查询?内存中是否有对象列表,并且要查询此列表?你想从数据库中获取这些数据吗?当然是从领域数据库。你如何访问你的数据库?使用ADO.NET还是ORM?如果你使用ORM,你使用哪种ORM?不确定。我只使用了领域库和以下语法:如果您曾经使用过LINQ,那么使用领域获取数据的方法非常简单。请看我的答案。如果您还没有,尽管您会通过阅读代码(LINQ的简单性和可读性)来理解,但我鼓励您阅读LINQ,因为它是C的一部分,任何C开发人员都应该拥有它。它节省了生命:)仅供参考:您需要首先将RealmObject
/RealmResult
查询带到一个列表,然后对信息执行选择投影,我不知道这一点。仅供参考:您需要先将RealmObject
/RealmResult
查询带到列表,然后执行选择投影。@对于信息,我不知道这一点。但在性能方面,哪种方式是最佳的?.ToList
在选择之前是否会导致过度操作?在性能方面,请使用生成的RealmObject
。它是活动的并连接到领域数据库,检索领域映射对象的所有属性不会受到任何惩罚。将其放入列表,然后投影一个属性较少的对象是一种性能上的打击(内存和速度),但有时您可能希望中断该实时连接,而ToList
会这样做。@InfernumDeus当您使用LinqSelect
将基本对象转换为某个对象时,在您的问题中,这就是选择投影,仅检索名字将是RealmObjects的IEnumerable到的IEnumerable的投影strings@InfernumDeus我添加了一个RealmResult迭代。。。。如果您仍然不清楚RealmObject属性的访问权限,并且有一个具体的例子来说明