在T-SQL中,你可以有这样的查询:
SELECT * FROM Users WHERE User_Rights IN ("Admin", "User", "Limited")
如何复制在一个LINQ实体查询?这可能吗?
在T-SQL中,你可以有这样的查询:
SELECT * FROM Users WHERE User_Rights IN ("Admin", "User", "Limited")
如何复制在一个LINQ实体查询?这可能吗?
当前回答
这可能是直接使用LINQ扩展方法检查in子句的可能方式
var result = _db.Companies.Where(c => _db.CurrentSessionVariableDetails.Select(s => s.CompanyId).Contains(c.Id)).ToList();
其他回答
严重吗?你们从没用过
where (t.MyTableId == 1 || t.MyTableId == 2 || t.MyTableId == 3)
在这种情况下,我将使用内连接。如果我使用contains,它将迭代6次,尽管事实上只有一个匹配。
var desiredNames = new[] { "Pankaj", "Garg" };
var people = new[]
{
new { FirstName="Pankaj", Surname="Garg" },
new { FirstName="Marc", Surname="Gravell" },
new { FirstName="Jeff", Surname="Atwood" }
};
var records = (from p in people join filtered in desiredNames on p.FirstName equals filtered select p.FirstName).ToList();
包含的缺点
假设我有两个列表对象。
List 1 List 2
1 12
2 7
3 8
4 98
5 9
6 10
7 6
使用Contains,它将搜索List 2中的每个List 1项,这意味着迭代将发生49次!!
这可能是直接使用LINQ扩展方法检查in子句的可能方式
var result = _db.Companies.Where(c => _db.CurrentSessionVariableDetails.Select(s => s.CompanyId).Contains(c.Id)).ToList();
这应该够你的目的了。它比较两个集合,并检查其中一个集合的值是否与另一个集合中的值匹配
fea_Features.Where(s => selectedFeatures.Contains(s.feaId))
真实的例子:
var trackList = Model.TrackingHistory.GroupBy(x => x.ShipmentStatusId).Select(x => x.Last()).Reverse();
List<int> done_step1 = new List<int>() {2,3,4,5,6,7,8,9,10,11,14,18,21,22,23,24,25,26 };
bool isExists = trackList.Where(x => done_step1.Contains(x.ShipmentStatusId.Value)).FirstOrDefault() != null;