Linq List包含方法

时间:2014-04-16 12:05:04

标签: c# linq

我是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

我得到特定用户的现金广告说100。我怎样才能实现它 以下代码是我尝试过的但是卡住的代码

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

2 个答案:

答案 0 :(得分:4)

以非常低效的方式存储用户的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(我认为LINQ将从表中检索所有值并执行C#代码中的where where部分)。

答案 1 :(得分:0)

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

 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();