如何将字符串数组添加到Where子句

时间:2013-08-09 08:20:13

标签: entity-framework

我有以下方法: -

public IQueryable<ComponentDefinition> GetProducts(string[] type)
        { return entities.ComponentDefinitions.Where(a => a.ComponentType.COMPONENTTYPENAME.ToLower() == type.ToLower());

        }

但我不知道如何添加诸如此类的内容,因此where将包含字符串数组: -  : -

public IQueryable<ComponentDefinition> GetProducts(string[] type)
            { return entities.ComponentDefinitions.Where(a => a.ComponentType.COMPONENTTYPENAME.ToLower() == type.ToLower().Any(type));

            }

2 个答案:

答案 0 :(得分:3)

您正在寻找的陈述是

return entities.ComponentDefinitions
               .Where(a => type.Contains(a.ComponentType.COMPONENTTYPENAME));

ToLower()怎么样?你可能不需要它。查询被转换为SQL,这意味着字符串的比较是在数据库中执行的。因此,数据库排序规则确定比较是否区分大小写。在大多数情况下,默认值不区分大小写。

如果排序规则区分大小写,则必须执行

return entities.ComponentDefinitions
               .Where(a => type
                   .Contains(a.ComponentType.COMPONENTTYPENAME.ToLower()));

并确保type数组仅包含小写字符串。

答案 1 :(得分:1)

怎么样:

public IQueryable<ComponentDefinition> GetProducts(string[] type)
            { return entities.ComponentDefinitions.Where(a => type.Contains(a.ComponentType.COMPONENTTYPENAME));}

如果没有,请查看加入COMPONENTTYPENAME字段上的集合。我发现linq查询比本例中的lambda表达式更容易理解

var result = from e in entities.ComponentDefifintion
             join x in type on type.COMPONTENTTYPENAME.ToLower() equals e.COMPONENTTYPENAME.ToLower()
             select x;