我正在尝试编写一些linq来搜索存储项中的值与列表中的任何值匹配的项目 - 如果它是字符串列表并搜索字符串,我可以轻松地执行此操作,但是当它是列表时enums(ints)我无法弄明白.
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();
Run Code Online (Sandbox Code Playgroud)
编辑进一步信息 -
代码是:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
MyTable包含各种项目,"Category"项是LocalCategory枚举,从1开始到10.
我得到的编译错误是 -
无法从使用中推断出方法`System.Linq.Enumerable.Contains(此System.Collections.Generic.IEnumerable,TSource)'的类型参数.尝试明确指定类型参数(CS0411)
我的猜测是LocalOffer.Category单一Category(基于名称).试试这个:
return
(from o in Table<LocalOffer>()
where categories.Contains(o.CategoryId)
select o)
.Count();
Run Code Online (Sandbox Code Playgroud)
但是,如果LocalOffer.Category是IEnumerable<Category>,这可能是你需要的:
return
(from o in Table<LocalOffer>()
where o.Any(c => categories.Contains(c.CategoryId))
select o)
.Count();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10368 次 |
| 最近记录: |