2012-04-17 2 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, скажите, пожалуйста, как извлечь результат сверху? –

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