簡體   English   中英

Linq列表包含方法

[英]Linq List Contains Method

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM