Linq to SQL - лучший способ работы с коллекцией объектов внутри другого объекта - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть таблица предметов для аукциона и таблица предложений, сделанных для этих предметов. В базе данных есть намного больше, но мы будем делать это просто.

public class Items
{
    public int ItemID { get; set; }
    public string ItemName { get; set; }
    public List<Bid> Bids { get; set; }
}

public class Bids
{
    public int BidID { get; set; }
    public int ItemID  { get; set; }
    public decimal Amount { get; set; }
    public datetime BidTime { get; set; }
    public int CustomerID { get; set; }
}

Я хочу вернуть набор данных, который включает ItemID, ItemName и все связанные записи ставок, упорядоченные BidTime, по убыванию. Наконец, я хотел бы видеть только те товары, на которые подал заявку определенный Клиент, и я хотел бы видеть только их ставки для этого товара. Между Bids.ItemID и Items.ItemID существует связь по внешнему ключу. Я использую Linq для SQL.

Это работает и, кажется, возвращает правильный набор данных:

from i in Items
from b in i.Bids
where i.AuctionID == 2 && b.CustomerID == (Int32?)1165
orderby b.BidTime descending
select new
{
    i.ItemID,
    i.ItemName,
    i.Bids
}

Я парень SQL, пытающийся обернуть голову вокруг ОО-природы Linq. Это лучший способ (или даже хороший) получить желаемый результат? Есть ли лучший способ?

Спасибо

BK

1 Ответ

0 голосов
/ 30 сентября 2011

Как насчет этого (немного более простой синтаксис):

Обновлено условие where из-за комментария

from i in db.items
where i.AuctionID == 2 && i.Bids.Any(c=>c.CustomerID == (Int32?)1165)
select new
{ i.ItemId,
  i.ItemName,
  i.Bids.Where(b=>b.CustomerID == (Int32?)1165 ).OrderbyDescending(b=>b.BidTime)
 }

Убедитесь, что вы профилируете SQL и убедитесь, что вы получаете только ОДИН оператор SQL. Если нет, вам необходимо добавить LoadOptions в ваш текст данных (это обеспечит загрузку всех предложений с вашими товарами).

Этот также будет заказывать ставки на предмет (не уверен, что ваши сделают то же самое .... но я думаю, вы это проверили).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...