linq包含数组中的(int)项

时间:2013-03-25 17:37:41

标签: c# linq contains

我正在尝试编写一些linq来搜索存储项中的值与列表中的任何值匹配的项目 - 如果它是一个字符串列表,我可以轻松地执行此操作。搜索一个字符串,但是当它是一个枚举列表(整数)时,我无法理解它。

List<MyEnum> categories = new List<MyEnum>();

categories.Add(MyEnum.Fred);
categories.Add(MyEnum.Bill);
categories.Add(MyEnum.Jim);

// MyTable.Category is of type MyEnum
return (from o in Table<MyTable>()
        where categories.Any(val => o.Category.Contains(val))
        select o).Count();

使用更多信息进行编辑 -

代码是:

public int LocalOffersCount(double distance, List<LocalCategory> categories)
{
    try
    {
        return (from o in Table<LocalOffer>() where categories.Any(val => o.Category.Contains(val)) select o).Count();
    }
    catch (Exception ex)
    {
        Log.Error("DatabaseService->LocalOffersCount: " + ex.Message);
        return 0;
    }
}

MyTable包含各种项目,“Category”项是LocalCategory枚举,从1开始到10。

我得到的编译错误是 -

无法从用法推断出方法`System.Linq.Enumerable.Contains(此System.Collections.Generic.IEnumerable,TSource)'的类型参数。尝试明确指定类型参数(CS0411)

1 个答案:

答案 0 :(得分:5)

我的猜测是LocalOffer.Category是一个Category(基于名称)。试试这个:

return 
    (from o in Table<LocalOffer>() 
     where categories.Contains(o.CategoryId) 
     select o)
    .Count();

但是,如果LocalOffer.CategoryIEnumerable<Category>,这可能就是您所需要的:

return 
    (from o in Table<LocalOffer>() 
     where o.Any(c => categories.Contains(c.CategoryId))
     select o)
    .Count();