2012-04-17 17 views
0

私はこのような2つのテーブルを含むデータセットがあります。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); 

あなたは4,5」で注文している理由私は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

にSQLクエリ以下の書くことができますどのように私はよく分からないが」しかし、それはこのようになります:

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(); 

次にあなたが

、例えば、使用してアクセスすることができます10
resultArray[0].FieldID 

など

+0

私は新しいLINQだから、上記queyの結果をどのように抽出するのか教えてください。 –

+0

@NIleshLanke私は答えを更新しました。これは、 "FieldID"、 "Name"などのプロパティを持つ匿名型の配列です。 – McGarnagle

+0

@NellshLanke:[Linq 101](http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b)を見てください。 LINQを使い始めるには、多くの素晴らしい例があります。 – raznagul

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") 
      };