LINQ(到实体) - 使用整数过滤项目

Jer*_*emy 3 linq linq-to-entities

使用LINQ to Entities,如何确定以逗号分隔的整数字符串中的int列表中的任何项目是否存在?

例如,我想写下面的内容(逻辑上):

collection.Where(collection.DelimitedStringOfInts.Contains(listOfInts.AnyOfThem))
Run Code Online (Sandbox Code Playgroud)

另外,我应该提到我正在使用LINQ方法链接,使用分隔字符串作为实体的一部分 -

var listOfInts = GetListOfInts();
var query = from x in Db.Items select x;
if (listOfInts != null && listOfInts.Count() > 0)
{
  query = query.Where(x => x.DelimitedStringOfInts.Contains(listOfInts.AnyOfThem));
}
Run Code Online (Sandbox Code Playgroud)

更新:
使用Alex的引用文章,我实现了一个工作解决方案如下:

var query = from x in Db.Items select x;
var listOfInts = GetListOfInts();
if (listOfInts != null && listOfInts.Any())
{
    //"ToListOfStrings" is a simple extension method I wrote to create a List<string> from a List<int>
    var delimitedIds = listOfInts.ToListOfStrings(','); 
    query = query.Where(
        BuildOrExpression<DatabaseItem, string>(x => x.DelimitedStringOfInts, delimitedIds)
        );
}
Run Code Online (Sandbox Code Playgroud)

本文中引用的"BuildOrExpression"需要更新.必须将"等于"运算符更改为"包含"运算符.

var contains = values.Select(value =>
    (Expression)Expression.Call(
                   valueSelector.Body,
                   typeof(string).GetMethod("Contains"),
                   Expression.Constant(
                           value,
                           typeof(TValue)
                   )
           )
   );
Run Code Online (Sandbox Code Playgroud)

Ale*_*mes 5

看看这个提示,它不是你要求的,但我认为你可以调整它来得到你想要的.

亚历克斯