4

我有以下方法: -

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));

            }
4

2 回答 2

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数组只包含小写字符串。

于 2013-08-09T08:33:24.253 回答
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;
于 2013-08-09T08:34:54.717 回答