2013-04-04 3 views
0

У меня есть следующие таблицы:Вставка пункт в DataGrid

enter image description here

Я использую 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 такой: enter image description here

Мой вопрос, как я должен настроить запрос выше, так что я получаю эквивалент следующий 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>(); 

Это лучший способ сделать это?

+1

Еще одна вещь (помимо моих ответов и комментариев ниже): EF автоматически создал класс с именем 'Sal1' против вашей таблицы базы данных со всеми столбцами таблицы как свойствами класса. Поэтому выполнение чего-то типа 'select sa' в вашем запросе LINQ будет возвращать коллекцию объектов« Sal1 », потому что первая часть запроса' from sa в db.Sal' уже сообщила LINQ о __type__ 'sa'. Но когда вы делаете JOIN, вы (обычно) выбираете столбцы, принадлежащие разным таблицам, и поэтому полученные __rows__ не имеют определенного типа. Поэтому LINQ создает новый тип «на лету». – dotNET

ответ

1

Как и SQL, LINQ также поддерживает JOINs. Подробнее о синтаксисе here. Вы должны изменить свой запрос, чтобы получить свои результаты. Вместо того, чтобы подбирать точный ответ, я направляю вас к более подробному объяснению, так как он содержит ценную информацию, которая поможет вам и в будущем.

+0

Спасибо за это. Однако, как мне выбрать - всего несколько столбцов, а не выбор всех столбцов? Я попытался сделать это, как в SQL, но он не работает и вызывает ошибку. – Edwin

+1

См. Http://msdn.microsoft.com/en-us/library/vstudio/bb397941.aspx. В случае JOINs вам часто нужно выбирать столбцы из более чем одной таблицы (сущности), поэтому возвращаемые объекты обычно имеют анонимный тип, например пример, который вы указали выше в разделе EDIT. Однако, если этот тип объектов используется чрезмерно в вашем коде, вы можете создать для него структуру или класс. Затем ваш запрос будет слегка изменен, т. Е. Вместо 'select new {sa.SaleID ...', вы сделаете 'select new YourClass {sa.SaleID ...'. Надеюсь, это поможет. – dotNET

+0

Я вижу. Спасибо за совет! – Edwin