Linq列表包含方法

本文关键字:方法 包含 列表 Linq | 更新日期: 2023-09-27 17:58:32

Im是linq的新手,使用linq查询从表中检索数据。我的想法是列出与特定用户对应的所有现金保险箱,并将其显示在下拉列表中。

下方显示了表格结构

Table 1
cashsafeid  cashsafename
  1           cashsafe1
  2           cashsafe2
  3           cashsafe3
Table 2
 Id   UserId   Cashsafeid 
  1    100      1,2,3
  2    101      1,3

我必须获得特定用户的cashsafename,比如100。我该如何实现它下面的代码是我尝试过的,但被卡住了

 List<Cashsafe> cashsafes=(from c in db.Table 1
                              where c.CashsafeId contains() )--Cannot go further

Linq列表包含方法

您以非常低效的方式存储User的Cachsafeid列-它不允许为LINQ提供程序生成高效的SQL。因此,以下解决方案的性能很差——如果您关心的话——请更改表结构。

var user = db.Table2.Single(u => u.UserId == 100);
var cachfeIds = user.Cashsafeid.Split(',').Select(int.Parse).ToArray();
var cachefes = db.Table1.Where(c => cachfeIds.Contains(c.Id)).ToList();

基本上,您需要加入表,但外键是"虚拟的"——它只在您的脑海中。要检索外键值,我们必须拆分每个用户的Cachsafeid列的值以检索链接的cachefes。然后用单独的请求检索cachefes(我认为LINQ将从表和C#代码中的execute Where部分检索所有值)。

如果你不知道加入,你可以使用

 int x = 0;
                List<int> Users = db.table2.FirstOrDefault(m => m.UserId == 100).Cashsafeid.Split(',').ToList().Where(str => int.TryParse(str, out x)).Select(str => x).ToList(); ;
                var content = db.table1.Where(m => Users.Contains(m.cashsafeid)).ToList();