2012-04-17 66 views
0

我有數據集包含兩個表是這樣的:Linq在c#中查詢數據集?

DataTable dtFields = new DataTable("tmpFieldTable"); 

dtFields.Columns.Add("FieldID"); 
dtFields.Columns.Add("CDGroupID"); 
dtFields.Columns.Add("CDCaption"); 
dtFields.Columns.Add("fldIndex"); 

DataTable dtCDGroup = new DataTable("tmpCDGroup"); 

dtCDGroup.Columns.Add("CDGroupID"); 
dtCDGroup.Columns.Add("Name"); 
dtCDGroup.Columns.Add("Priority"); 

DataSet ds = new DataSet("tmpFieldSet"); 

ds.Tables.Add(dtFields); 
ds.Tables.Add(dtCDGroup); 

我如何寫下面的SQL查詢來LINQ

queryString = "Select FieldID, tmpCDGroup.Name, CDCaption, IIF(ISNULL(Priority),99,Priority), fldIndex from tmpFieldList LEFT OUTER JOIN tmpCDGroup ON tmpFieldList.CDGroupID = tmpCDGroup.CDGroupID order by 4,5 "; 

回答

1

我不知道爲什麼你訂購的「4,5 」,但它會是這樣:

var resultArray = tmpFieldList.Join(
    tmpCDGroup,       // inner join collection 
    fieldList => fieldList.CDGroupID,  // outer key selector 
    cd => cd.CDGroupID,     // inner key selector 
    (fieldList, cd) => new {    // result selector 
     FieldID = fieldList.FieldID, 
     Name = cd.Name, 
     CDCaption = cd.CDCaption, 
     Priority = fieldList.Priority ?? 99, 
     fldIndex = fieldList.fldIndex 
    }) 
.OrderBy(result => result.Priority) 
.ThenBy(result => result.fldIndex) 
.ToArray(); 

然後你就可以訪問使用,例如,

resultArray[0].FieldID 

+0

因爲我是新的LINQ,請告訴我如何從上面的提示中提取結果? – 2012-04-17 07:37:44

+0

@NIleshLanke我更新了答案,希望有所幫助。它只是一個具有「FieldID」,「Name」等屬性的匿名類型的數組。 – McGarnagle 2012-04-17 07:43:06

+0

@NellshLanke:看看[Linq 101](http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b)。有很多很好的例子可以開始使用LINQ。 – raznagul 2012-04-17 07:47:18

0

這可能工作或至少有助於使它工作。請注意,我更改了某些列的類型。

var result = from field in dtFields.AsEnumerable() 
      join cdGroup in dtCDGroup.AsEnumerable() 
      on field.Field<int>("CDGroupID") equals cdGroup.Field<int>("CDGroupID") 
        into fieldGroup 
      from row in fieldGroup.DefaultIfEmpty() 
      let priority = row.IsNull("Priority") ? 99 : row.Field<int>("Priority") 
      orderby priority, row.Field<int>("fldIndex") 
      select new 
      { 
       FieldID = row.Field<int>("FieldID"), 
       GroupName = row.Field<int>("Name"), 
       CDCaption = row.Field<int>("CDCaption"), 
       Priority = priority, 
       fldIndex = row.Field<int>("fldIndex") 
      };