2010-12-23 3 views

Antwort

3

Denken Sie daran, in Teilen ...

Wie würden Sie das tun in SQL?

SELECT DISTINCT sc.CategoryID 
FROM SubCategory sc 
WHERE sc.SubCategory IN (
    SELEcT DISTINCT scpg.SubCategoryID 
    FROM SubCategoryProductGroups scpg 
    WHERE scpg.ProductGroupID = 12) 

Um dies zu tun, in LINQ2SQL wäre es so etwas wie dieses ...

using (var db = new MyDataContext()) { 
    var query = (from sc in db.SubCategories 
       where (from scpg in db.SubCategoryProductGroups 
         where scpg.ProductGroupID == 12 
         select scgp.SubCategoryID).Distinct().Contains(sc.SubCategoryID) 
       select sc.CategoryID).Distinct(); 
} 

... Sie auch Verknüpfungen verwenden könnte ...

SQL ...

SELECT DISTINCT sc.CategoryID 
FROM SubCategory sc 
JOIN SubCategoryProductGroups scpg ON sc.SubCategoryID = scpg.SubCategoryID 
WHERE scpg.ProductGroupID = 12 

LINQ2SQL ...

var query = (from sc in db.SubCategories 
      join scpg in db.SubCategoryProductGroups 
        on sc.SubCategoryID equals scpg.SubCategoryID 
      where scpg.ProductGroupID == 12 
      select sc.CategoryID).Distinct(); 

... Wenn Sie LINQ Modell der Beziehung weiß, dass Sie wahrscheinlich dies tun könnte ...

var query = (from sc in db.SubCategories 
      where sc.SubCategoryProductGroups 
        .Any(s=>s.ProductGroupID == 12) 
      select sc.CategoryID).Distinct(); 
+0

Perfekt, vielen Dank für die vielen Beispiele. –

+0

Kein Problem ... schien ein guter Ort zu sein um "einem Mann beizubringen zu fischen" –

0

this helps

var result = from sc in SubCategory 
    join scpg in SubCategoryProductGroups 
    on sc.SubCategoryID equals scpg.SubCategoryID 
    where scpg.ProductsGroupID =12 
    select sc.CategoryID 
1

dc.subcatogorysproductsgroups.where (o => o .productgroupid == 12) .select (j => ocatogory.catogory);

Eine Sache ist, wenn Sie LINQ zu SQL verwenden, dann ist es nicht notwendig, Join zu verwenden, wenn die Datenbank vollständig normiert ist. und bevor Sie diesen Code verwenden, stellen Sie sicher, dass dc.defferedloadingenabled auf true gesetzt ist. oder verwenden Sie DataLoadOptions und Dc.loadPropery