Переменная Диапазона и DataRow
Объясниете, пожалуйста, как OrderDate снчала переменная и сохраняет числа а потом становится строкой. И выводит к тому же дату. Хотя изначально сохраняла "CustomerNo" ?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
// Перекресные запросы между таблицами LINQ to DataSet
namespace Joins
{
class Program
{
static void Main(string[] args)
{
DataSet ShopDB = new DataSet();
ShopDB.ReadXmlSchema(@"D:\ADO.NET\DATA\ShopDbSchema.xml");
ShopDB.ReadXml(@"D:\ADO.NET\DATA\ShopDbData.xml");
var customers = ShopDB.Tables["Customers"];
var orders = ShopDB.Tables["Orders"];
var inner = from customer in customers.AsEnumerable() // InnerJoin
join order in orders.AsEnumerable()
on customer["CustomerNo"] equals order["CustomerNo"]
select new { Fname = customer["FName"], LName = customer["LName"], OrderDate = order["OrderDate"] };
var outer = from customer in customers.AsEnumerable() // OuterJoin
join order in orders.AsEnumerable()
on customer["CustomerNo"] equals order["CustomerNo"] into OrderDate //здесь OrderDate это переменная диапазона
select new { Fname = customer["FName"], LName = customer["LName"], OrderDate }; //здесь OrderDate это DataRow
foreach (var item in inner)
{
Console.WriteLine("{2:D} {1} {0}", item.LName, item.Fname, item.OrderDate);
}
Console.WriteLine(new string('-', 20));
foreach (var item in outer)
{
Console.WriteLine("{1} {0}", item.LName, item.Fname);
foreach (var item2 in item.OrderDate) // теперь используя item из внешнего циклаitem.OrderDate??
{
Console.WriteLine("\t" + item2["OrderDate"]);
}
Console.WriteLine();
}
}
}
}
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Тут все просто
В первом случае вы создаёте новый объект и заполняете его поля
new { Fname = customer["FName"], LName = customer["LName"], OrderDate = order["OrderDate"] };
при этом явно указываете чему равно поле в новом объекте OrderDate = order["OrderDate"]
Во втором случае вы создаете объект
new { Fname = customer["FName"], LName = customer["LName"], OrderDate };
данная запись эквивалентна
new { Fname = customer["FName"], LName = customer["LName"], OrderDate = OrderDate};
где
OrderDate это результат
join order in orders.AsEnumerable()
on customer["CustomerNo"] equals order["CustomerNo"]
или
OrderDate = order // это псевдоним в данном случае
То есть вы вполне можете переписать второй случай на эквивалентный
var outer = from customer in customers.AsEnumerable() // OuterJoin
join order in orders.AsEnumerable()
on customer["CustomerNo"] equals order["CustomerNo"]
select new { Fname = customer["FName"], LName = customer["LName"], OrderDate = order};
Думаю теперь понятно почему у вас в первом случае это значение поля во втором это вся запись.


