鉴于:
List<int> myList;
Run Code Online (Sandbox Code Playgroud)
如果我想返回记录ID包含在此列表中的数据,我只需:
var q = db.Table.Where(c=> myList.Contains(c.ID));
Run Code Online (Sandbox Code Playgroud)
但是,鉴于:
List<Tuple<int, int>> myList;
Run Code Online (Sandbox Code Playgroud)
如何编写Linq查询以返回满足两个条件的记录?有一个数据点,我会写:
var q = db.Table.Where(c=>
c.ID == myList.Item1
&& c.AnotherValue == myList.Item2);
Run Code Online (Sandbox Code Playgroud)
如何将上述语句转换为工作List<Tuple<int, int>>?
A Tuple是一个不能由Linq Provider转换为sql的结构.解决方案可能是切换到Linq to Objects
var q = db.Table.AsEnumerable()
.Where(c=> myList.Any(tuple => c.ID == tuple.Item1 &&
c.AnotherValue == tuple.Item2));
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案的坏处是你要从该表加载所有行来过滤内存.
另一种解决方案可能是使用Linqkit:
var predicate = PredicateBuilder.False<Table>();
foreach (string t in myList)
{
predicate = predicate.Or(c =>c.ID == t.Item1 && c.AnotherValue == t.Item2));
}
db.Table.AsExpandable().Where(predicate);
Run Code Online (Sandbox Code Playgroud)
您将在此链接中找到有关此最后一个解决方案的更多信息
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |