2013-03-25 53 views
1

我正在尝试编写一些LINQ,用于搜索存储的项目中的值与列表中的任何值匹配的项目 - 如果它是一个字符串列表&搜索一个字符串,但是当它是一个枚举(整数)列表我无法弄清楚。LINQ包含数组中的(int)项

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的包含各种项目, “类别” 项目是一个LocalCategory枚举从1开始将10

我得到的编译错误是 -

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

+2

什么具体的错误(S)你好吗? – 2013-03-25 17:39:40

+0

为什么不编译?什么是错误? – AlexFoxGill 2013-03-25 17:40:16

+0

“当它是一个枚举(整数)列表” - >错误#1。枚举!=整数。但如果你真的发布了这个错误,而不是仅仅说明它不会编译,它将会对大众有所帮助。你很可能会得到更快的答案,并且当你搜索它时,你会为那些有同样问题的人提供服务(我们不是在这里帮助你*)。 – 2013-03-25 17:40:39

回答

4

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

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

然而,如果LocalOffer.Category是一个IEnumerable<Category>,这可能是你需要的东西:

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