使用Linq比较两个数据表

时间:2013-05-28 18:12:58

标签: c# asp.net linq web-applications

我正在开发一个C#ASP.NET Web应用程序。我从两个数据库中提取数据。一个是保存我们所有实际数据的数据库,第二个是使用,以便网站的用户可以保存“收藏夹”并在以后轻松找到这些数据。数据库包含以下列:

表1:

itemid, itemdept, itemdescription

表2:

userid, itemid, itemdept, itemdescription

如果该项目存在于table2中(用户已经添加了该项目),我想将该项目标记为可移动的,如果它在搜索中再次出现,并且如果它还没有在他们的收藏夹中则可添加。

我从两个数据库中获取数据,所以我可以比较它们,但我觉得使用嵌套的foreach循环将太繁琐,因为查询被设置为返回最多300个结果。另外,为了做到这一点,我必须在其中一个表中添加一个bool值来标记它被找到,所以这看起来很混乱。

我在Linq上读过一些内容,但找不到与此场景完全相同的内容。我可以用Linq来完成这样的事吗?下面是搜索结果页面的一个(公认的粗略)图像,可能有助于更好地掌握这一点。在实际交易中,添加和删除链接将是图像按钮。

SiteLayout

1 个答案:

答案 0 :(得分:0)

忘了将解决方案发布到这个,但是我使用了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;
    }
}