[英]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.