2012-02-23 84 views
1

我使用LINQ在我的项目,以SQL表的字段。 我有两个表类别和工件与分类和工件之间的一对多关系。在CatgID的基础上,我试图删除工件。我写的查询检查是否有任何工件存在id的外键,然后我将Artifact ID分组到g以便进行计数,以便我可以创建条件以将Artifact ID作为参数传递给将删除的函数Artifacts表中的所有内容。无法访问使用范围变量中的LINQ to SQL

我不能使用相同的范围变量“a”来选择artid的数据类型。为什么不?我如何做到这一点或以其他方式实现我想要的?

public static void DeleteCategory(int id) 
{ 
    var result = from a in adb.Artifacts 
        where a.CatgId == id 
        group a by a.ArtId into g 
        select new { count = g.Count(), **artid = a.ArtId** }; //not able to get ArtId using range variable a. 

    if (result.count > 0) 
    { 
     foreach (var r in result) 
     { 
      MyArtifact.DeleteByKey(r.artid); 
     } 
    } 
} 

回答

2

您可以只使用g.ArtId因为你的artid的数据类型组:

public static void DeleteCategory(int id) 
{ 
    var result = from a in adb.Artifacts 
       where a.CatgId == id 
       group a by a.ArtId into g 
       select new { count = g.Count(), artid = g.Key }; //not able to get ArtId using range variable a. 

    if (result.count > 0) 
    { 
     foreach (var r in result) 
     { 
      MyArtifact.DeleteByKey(r.artid); 
     } 
    } 
} 
+0

嘿HCB, 我一直在使用范围变量g和访问神器表的artid的数据类型尝试。但是,当我做到这一点,我面对这个错误 “‘System.Linq.IGrouping ’不包含关于‘artid的数据类型’和没有扩展方法‘artid的数据类型’接受型的第一参数'的定义System.Linq.IGrouping ”可以找到(是否缺少using指令或程序集引用?)” – 2012-02-23 11:56:21

+0

您可以使用g.First()。artid的数据类型。我认为这应该工作(我也会编辑答案) – hcb 2012-02-23 12:01:47

+0

是的这个工程,但我不能理解使用First()的概念。它说First()返回序列的第一个元素! – 2012-02-23 12:04:19