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)
归档时间: |
|
查看次数: |
1814 次 |
最近记录: |