我有一个从查询字符串中获得的以逗号分隔的记录 ID 列表。我需要使用这些 ID 返回所有记录(来自 SQL Server 数据库)。在 Linq 中做到这一点的最佳方法是什么?
我认为它最终将被转换为“WHERE id IN (1,2,3,...)”形式的 SQL 语句,并且由于该查询包含与我开始时相同的逗号分隔列表,将其解压缩为 int 数组然后让 Linq 再次将其转换回来似乎很可惜。但如果这是唯一的方法,那很好。
我有一个从查询字符串中获得的以逗号分隔的记录 ID 列表。我需要使用这些 ID 返回所有记录(来自 SQL Server 数据库)。在 Linq 中做到这一点的最佳方法是什么?
我认为它最终将被转换为“WHERE id IN (1,2,3,...)”形式的 SQL 语句,并且由于该查询包含与我开始时相同的逗号分隔列表,将其解压缩为 int 数组然后让 Linq 再次将其转换回来似乎很可惜。但如果这是唯一的方法,那很好。
正如您所暗示的,首先将其转换为数组是最简单的。
string csv = "1,2,3";
IEnumerable<int> ids = csv.Split(',').Select( str => int.Parse(str));
var records = db.Records.Where( rec => ids.Contains(rec.id) );
使用 Dynamic Linq 避免不必要的转换
.Where("MyColumn.Contains(@0)", myArray)