Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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#_Linq_Search - Fatal编程技术网

C# 具有未知索引数据的搜索函数

C# 具有未知索引数据的搜索函数,c#,linq,search,C#,Linq,Search,我想做一个搜索功能,从5个文本框,姓名,性别,身份证,动物类别和动物中获取indata。动物类别和动物之间的区别在于,例如,动物类别=哺乳动物,动物=熊。 因此,这些参数对于用户来说是可选的,当他/她点击按钮时,它应该搜索给定的参数。 数据保存在动物类型的通用列表中。清单动物采集 我尝试使用linq,我的查询-> ienumerable<Animal> result= from a in animalCollection where a.Name== myParam

我想做一个搜索功能,从5个文本框,姓名,性别,身份证,动物类别和动物中获取indata。动物类别和动物之间的区别在于,例如,动物类别=哺乳动物,动物=熊。 因此,这些参数对于用户来说是可选的,当他/她点击按钮时,它应该搜索给定的参数。 数据保存在动物类型的通用列表中。清单动物采集

我尝试使用linq,我的查询->

    ienumerable<Animal> result= 
    from a in animalCollection where a.Name== myParameterName
    &&
    a.Gender == myParameterGender
    select a;
ienumerable结果=
来自动物集合中的,其中a.Name==myParameterName
&&
a、 性别==我的参数性别
选择一个;
当用户想要一个或两个以上的参数时,问题就出现了,因为我不知道如何根据用户输入进行查询。 我需要做一堆if语句来检查用户输入吗?我希望还有别的办法

我向你们这些聪明的专家寻求帮助!希望我说得够清楚


Daniel,瑞典

假设您的参数都是字符串,那么您可以执行以下操作:

var result = from a in animalCollection
             where (string.IsNullOrEmpty(myParameterName) || a.Name == myParameterName)
                && (string.IsNullOrEmpty(myParameterGender) || a.Gender == myParameterGender)
                && (string.IsNullOrEmpty(myParameterID) || a.ID == myParameterID)
                && (string.IsNullOrEmpty(myParameterCategory) || a.Category == myParameterCategory)
                && (string.IsNullOrEmpty(myParameterAnimal) || a.Animal == myParameterAnimal)
             select a;

卢卡,谢谢你的快速回复。我尝试了您的查询,但当其中一个参数为空时,该查询不起作用。例如,name=”“,性别=女性。我没有sugestions了,我已经花了很长一段时间试图解决这个问题了。Daniel@Daniel当前位置在那种情况下它应该可以工作。会发生什么?你有错误吗?查询是否不返回任何结果?意外的结果?你太棒了!真的很管用!我真高兴!我花了大约两天的时间试图找到一个好的解决方案!这正是我想要的。我很抱歉指责你的解决方案是错误的,我已经试了很多次了。这真是太好了!!就几排!令人惊叹的!多亏了你,现在我的搜索功能运行得很好!关于这个查询只有一个问题。。。例如:(string.IsNullOrEmpty(myParameterName)| | a.Name==myParameterName)这个查询是如何工作的?如果string.IsNullOrEmpty首先获得匹配,那么它不应该查找名称?我说得对吗?如果是假的,那就查名字…@丹尼尔:没错。因此,例如,如果只提供
myParameterID
,那么查询将大致相当于
…其中true&&true&&(a.ID==myParameterID)&&true&&true…
好的!我不确定我是否真的完全明白,尽管我很想。在(string.IsNullOrEmpty(myParameterName)| | a.Name==myParameterName)中,如果参数为空,那么IsNullOrEmpty应该返回false,对吗?并且a.Name==nameparmeter也应该返回false,因为它至少需要一些字符。因此(string.IsNullOrEmpty(myParameterName)| | a.Name==myParameterName)将是(false | | false)。尽管如此!其中一个语句必须返回true,否则查询将不会继续查找其他参数(性别、id、cat和动物)中的输入。