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
您以非常低效的方式存储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();