簡體   English   中英

使用Linq比較兩個數據表

[英]Using Linq for comparison of two Datatables

我正在開發C#ASP.NET Web應用程序。 我有從兩個數據庫中提取的數據。 第一個是保存我們所有實際數據的數據庫,第二個將被使用,以便站點的用戶可以保存“收藏夾”並在以后輕松地找到這些數據。 數據庫具有以下列:

表格1:

itemid, itemdept, itemdescription

表2:

userid, itemid, itemdept, itemdescription

如果該項目存在於table2中(用戶已經添加了該項目),那么我想將該項目標記為可移動(如果它在搜索中再次出現),並且可添加(如果尚未添加到他們的收藏夾中)。

我已經將兩者中的數據都放入了數據表中,以便可以對其進行比較,但是我覺得使用嵌套的foreach循環會太乏味,因為查詢被設置為最多返回300個結果。 為此,我必須在其中一個表中放入一個bool值以標記已找到它,因此這看起來很混亂。

我已經閱讀了一些有關Linq的內容,但是找不到與這種情況完全相同的東西。 我可以用Linq完成這樣的事情嗎? 以下是搜索結果頁面的圖像(一定很粗糙),可以幫助您更好地掌握這一點。 實際上,添加和刪除鏈接將是圖像按鈕。

網站布局

忘記將解決方案發布到該解決方案上了,但是我選擇了HashSet設置,並進行了一個比較。 謝謝大家的評論。

if (User.Identity.IsAuthenticated)
{
    DataColumn dc = new DataColumn("isMarked", System.Type.GetType("System.Int32"));
    ds.Tables[0].Columns.Add(dc);
    string[] strArray = ds.Tables[0].AsEnumerable().Select(s => s.Field<string>("itemid")).ToArray<string>();
    HashSet<string> hset = new HashSet<string>(strArray);
    foreach (DataRow dr in ds.Tables[0].Rows)
    {
         if (hset.Contains(dr["itemid"].ToString().Trim()))
             dr[3] = 1;
         else
             dr[3] = 0;
    }
}

暫無
暫無

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

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