Linq 你能让这个多对多脚本更具动态性吗?

Linq 你能让这个多对多脚本更具动态性吗?,linq,linq-to-sql,linq-to-objects,Linq,Linq To Sql,Linq To Objects,这只是我创建多对多关系的简单方法,但我希望能够轻松创建多对多,我希望能够创建一个方法返回类型匿名,这将打开一些门。但我还不擅长匿名类型 希望你能帮忙 你们需要的时候做什么 private class Ids { public int Id; } 。在某些方面: IList<Ids> objIds = new List<Ids>(); var q = from c in dt.FK_Tags_Blogs where c.BlogId == so

这只是我创建多对多关系的简单方法,但我希望能够轻松创建多对多,我希望能够创建一个方法返回类型匿名,这将打开一些门。但我还不擅长匿名类型

希望你能帮忙

你们需要的时候做什么

private class Ids
{
    public int Id;
}

。在某些方面:

IList<Ids> objIds = new List<Ids>();

var q = from c in dt.FK_Tags_Blogs
        where c.BlogId == someId
        select c.TagId;

foreach (var item in q)
{
    objIds.Add(new Ids { Id = item });
}

var w = from c in objIds
        join p in dt.Tags on c.Id equals p.Id
        select p;
大卫B:我用你的代码是这样的:

    public static IQueryable<Tag> printTags(int id)
{
    DataClassesDataContext dt = new DataClassesDataContext();

     return 
      from b in dt.Blogs
      where b.Id == id
      from xr in b.FK_Tags_Blogs
      select xr.Tag;
}
那很愚蠢吗?

我做的是:

  //linq to objects
IEnumerable<Tag> tags = 
  from c in dt.FK_Tags_Blogs
  where c.BlogId == someId
  join p in dt.Tags on c.TagId equals p.Id
  select p;


  //linq to sql with association properties
IQueryable<Tag> tagsQuery =
  from b in dc.Blogs
  where b.BlogId == someId
  from xr in b.FK_Tags_Blogs
  select xr.Tag;

哇,我不知道为什么效果这么好,谢谢!第二个代码块是如何连接到第一个的?是末尾的xr.标记吗。。。如何使用?我将第一个块用于内存中的对象,这些对象位于单独的集合中,并且仅通过值连接。我将使用LINQtoSQL的第二个块从数据库中读取数据——为了使其工作,dbml中必须存在关联才能存在这些关系属性。附言:很多人都很惊讶在加入linq查询之前哪里可以来。我更新了帖子,看看,我会多看几遍你的帖子:。啊,这样他们就不会一起工作了!您所说的关联属性是指在数据库中建立的密钥?如果数据库中存在外键,则设计器将创建匹配的关联。否则,右键单击设计器中的某些开放空间并添加关联。此外,您可能想查看一下dbml文件的内部,这只是xml,看看创建了什么。您可能想了解PLINQO的人员如何修改LINQ to SQL上的代码生成,以避免LINQ to SQL模型中的中间联接表:。
  //linq to objects
IEnumerable<Tag> tags = 
  from c in dt.FK_Tags_Blogs
  where c.BlogId == someId
  join p in dt.Tags on c.TagId equals p.Id
  select p;


  //linq to sql with association properties
IQueryable<Tag> tagsQuery =
  from b in dc.Blogs
  where b.BlogId == someId
  from xr in b.FK_Tags_Blogs
  select xr.Tag;