Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何建立一个内部搜索引擎?_C#_Wpf_Search - Fatal编程技术网

C# 如何建立一个内部搜索引擎?

C# 如何建立一个内部搜索引擎?,c#,wpf,search,C#,Wpf,Search,我正在寻找一种方法来建立一个内部搜索引擎,根据标准搜索交易。 我的问题是更多的标准意味着更多的检查。。因此,如果有6个标准。。在IF语句中,我几乎必须执行6x6=36的其他操作。那么大。。我很肯定还有别的办法 说明:如果我有一个有A,B,C,D,E,F的对象,我必须检查 A,B,C,D,E NOT F A,B,C,D, NOT E, F A,B,C, NOT D, E, F etc.. 那我怎么处理呢?(我将C#与WPF一起使用) 编辑:这里有更多的细节 这是代码而不是SQL 必须评估的标准

我正在寻找一种方法来建立一个内部搜索引擎,根据标准搜索交易。 我的问题是更多的标准意味着更多的检查。。因此,如果有6个标准。。在IF语句中,我几乎必须执行6x6=36的其他操作。那么大。。我很肯定还有别的办法

说明:如果我有一个有A,B,C,D,E,F的对象,我必须检查

A,B,C,D,E NOT F
A,B,C,D, NOT E, F
A,B,C, NOT D, E, F
etc..
那我怎么处理呢?(我将C#与WPF一起使用)

编辑:这里有更多的细节

  • 这是代码而不是SQL
  • 必须评估的标准数量取决于用户

谢谢。

这样做的方法是建立某种表达式树。这可能只是标准对象的列表。每个对象都有一个“检查”方法来说明元素是否通过了测试。您可以在运行时构建此列表,然后使用它检查每个候选项


或者看看林克。它非常适合。

我假设您正在构建一个sql命令。通常,我们只需要放置一系列IF/CASE语句(每个可能的参数对应一个语句)来附加SQL。但是现在,您可以使用LINQ:

var q = from c in Customers select c;

if(!String.IsNullOrEmpty(param.Name))
    q = q.Where(c => c.Name.Contains(param.Name));

if(param.CustID.HasValue)
    q = q.Where(c => c.ID == param.CustID);

if(!String.IsNullOrEmpty(param.CustAddr))
    q = q.Where(c => c.Addr.Contains(param.CustAddr));

//use your results!

你能发布更多的细节吗,比如你有什么样的标准?它们是如何指定给搜索引擎的,等等。这将使回答更容易。您对需要多少IF语句的计算是不正确的。您需要的是2^6=64个语句,而不是6^2。如果同时需要A=“blah”和A NOT=“blah”,则需要2^7=128次检查。(嗯,这是对的吗?)(显然我并不是建议你实际上硬编码128条if语句)@Brian我希望这就是为什么我在这里问lol,但是的,我犯了一个错误,我需要64条语句。。但是我不能硬编码这个。。那太疯狂了。@Lasse我有一个对象和一个搜索引擎,在那里你可以输入6个标准。您必须能够评估这6个标准,以确定事务是否是结果的一部分。它应该是
q=q.Where…
,否则您只是扔掉新的
IQueryable
对象。因此,基本上是在每个步骤中消除事务(那些不符合标准的事务)用LINQ查询?很有趣。嗯,我正在考虑为这个制作一个对象,但我认为这会导致完全相同的问题。但也许不是。。我们得看看这个,有各种各样的方法。诀窍是要记住,您可以在运行时构建和使用数据结构。不要被“静态”思维所束缚。这个解决方案非常有效。谢谢你帮我节省了很多时间!