У меня есть следующие таблицы:Вставка пункт в DataGrid
Я использую Entity Framework базы данных Во-первых, таким образом генерируется следующий класс сущностей:
public partial class Sal1 {
public string SaleID { get; set; }
public string ItemID { get; set; }
public int Quantity { get; set; }
public decimal Total { get; set; }
public virtual Item Item { get; set; }
public virtual Sale Sale { get; set; }
}
Затем положить Sal1 ряды в такой файл данных:
private List<Sal1> saleItems = new List<Sal1>();
...
var query = from sa in db.Sal1
where sa.SaleID.Equals(tempSale)
select sa;
foreach(Sal1 si in query) {
saleItems.Add(si);
}
...
dgDetails.ItemsSource = saleItems;
Но это tu RNS такой:
Мой вопрос, как я должен настроить запрос выше, так что я получаю эквивалент следующий SQL:
select T0.SaleID, T0.ItemID, T1.Name, T0.Quantity, T0.Total
from Sal1 T0 inner join Item T1 on T0.ItemID = T1.ItemID;
Спасибо заранее.
EDIT: Я, кажется, нашел решение, но я должен был сделать это:
var query = from sa in db.Sal1
where sa.SaleID.Equals(tempSale)
select new { sa.SaleID, sa.ItemID, sa.Item.Name,
sa.Item.Manufacturer, sa.Quantity, sa.Total };
И я должен был изменить тип saleItems на объект.
private List<object> saleItems = new List<object>();
Это лучший способ сделать это?
Еще одна вещь (помимо моих ответов и комментариев ниже): EF автоматически создал класс с именем 'Sal1' против вашей таблицы базы данных со всеми столбцами таблицы как свойствами класса. Поэтому выполнение чего-то типа 'select sa' в вашем запросе LINQ будет возвращать коллекцию объектов« Sal1 », потому что первая часть запроса' from sa в db.Sal' уже сообщила LINQ о __type__ 'sa'. Но когда вы делаете JOIN, вы (обычно) выбираете столбцы, принадлежащие разным таблицам, и поэтому полученные __rows__ не имеют определенного типа. Поэтому LINQ создает новый тип «на лету». – dotNET