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当您使用Linq
Select
将基本对象转换为某个对象时,在您的问题中,这就是选择投影,仅检索
名字将是RealmObjects的IEnumerable到的IEnumerable的投影strings@InfernumDeus我添加了一个RealmResult迭代。。。。如果您仍然不清楚RealmObject属性的访问权限,并且有一个具体的例子来说明