English 中文(简体)
如何成功地连接两个内存中的linq集合?
原标题:
  • 时间:2009-04-09 17:08:17
  •  标签:

我正在尝试加入一个来自数据库的Linq集合和一个来自XML文件的集合。这可能吗?我总是得到:除了Contains()运算符之外,本地序列不能在查询运算符的LINQ到SQL实现中使用

这是我的代码:

MyDataContext dc = new MyDataContext();
XElement CustomData;

var pages = from p in dc.Pages
            select new
            {
                Title = p.Title,
                Slug = p.Slug,
                PageId = p.PageId.ToString()
            };

var orders = from p in CustomData.Element("pages").Elements("page")
             select new
             {
                 PageId = (string)p.Attribute("id"),
                 SortOrder = (int)p.Attribute("sortOrder")
             };


var source = from p in pages
             join o in orders
             on p.PageId equals o.PageId
             select p;

source.ToList();
最佳回答

我认为你根本不需要加入。

MyDataContext dc = new MyDataContext();
XElement CustomData;

var orders = CustomData.Element("pages").Elements("page")
                       .Select( o =>  new
                         {
                             PageId = p.Attribute("id").ToString(),
                             SortOrder = (int)p.Attribute("sortOrder")
                         });

var source = dc.Pages
               .Where( p => orders.Select( o => o.PageId)
                                  .Contains( p.PageId.ToString() ))
               .Select( p => new
                {
                  Title = p.Title,
                  Slug = p.Slug,
                  PageId = p.PageId.ToString()
                });
问题回答

看起来您无法通过延迟执行来连接本地集合(订单)和LINQ2SQL结果。您可以执行页面查询ToList(就像tvanfosson最初建议的那样:),也可以这样做。。。

var source = from p in pages
             where orders.Select(o=> o.PageID).Contains(p.PageID)
             select p;

这并不是你想要的联接,但如果你想延迟执行LINQ2SQL,你可以这样做。





相关问题
热门标签