gpt4 book ai didi

arrays - Ravendb 数组相交

转载 作者:行者123 更新时间:2023-12-01 11:51:21 25 4
gpt4 key购买 nike

我有一个简单的 Raven dB 表,如下所示:

char[] colorArray= colorValue.ToCharArray().Distinct().ToArray();

for loop{
var entity = new Color { ID = id, colorArray = colorArray };
session.Store(entity);
}
Session.Savechanges();

此表包含 1000 条或更多条记录。


现在用户输入一个数组:

char[] userinput=userinput.tocharArray().Distinct().ToArray();

假设用户的数组由字符“r”、“e”和“d”组成。我需要列出包含所有用户输入字符的所有记录(即输出记录需要有“r”、“e”和“d”字符)。

我尝试了不同的技术,包括:

.Where(x=>x. colorArray.Intersect(userinput).Count()==userinput.count())

但不工作,给出以下错误:无法理解如何翻译 x.subsetArray.Intersect...

最佳答案

数组交集是不允许的,但是你可以这样写你的查询:

var colors = session.Query<Color>()
.Where(c =>
c.colorArray.Any(x => x == "r") &&
c.colorArray.Any(x => x == "e") &&
c.colorArray.Any(x => x == "d"));

请注意,为了使其工作,您需要使用 string,而不是 charColor 类中的 colorArray 属性需要定义为:

public string[] colorArray { get; set; }

原因是,如果您使用 char[],则查询将检查数值(ASCII 代码)而不是字符串值(例如:'r' 将被查询引擎解释为 114'e'101'd'100).

现在,下一步要使查询条件动态化,关于 userInput 字符串数组:

var userInput = new[] {"r", "e", "d"};

var colors = session.Query<Color>();

// dynamically add a WHERE clause for each letter in the array
foreach (var letter in userInput)
{
var currentLetter = letter;

colors = colors.Where(c => c.colorArray.Any(x => x == currentLetter));
}

// display the results
foreach (var color in colors)
Console.WriteLine(color);

这应该会产生您期望的结果:colorArray 中包含 "r""e""d" 的文档.

关于arrays - Ravendb 数组相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18717975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com