2 запроса linq для одного вида сетки - PullRequest
1 голос
/ 24 ноября 2011

Я хотел бы «объединить» запросы linq в одно и то же представление сетки. Хотя я не думаю, что смогу использовать innerjoin для этого. Запросы получают заказы из базы данных, и у меня есть 2 таблицы с заказами из разных мест. В сетке я хочу отобразить все ордера из первой и второй таблицы. Как это:

OrderID - Item - Amount etc ---From table 1
OrderID - Item - Amount etc ---From table 2
etc..

Мой текущий запрос на получение заказов из первой таблицы:

var query = from o in db.Orders
            join y in db.OrderLines on o.OrderID equals y.OrderID
            join x in db.Products on y.ItemNumber equals x.ItemNumber
            where o.AccountNumber == AppSession.CurrentLoginTicket.AccountNumber
            select new
            {
                o.OrderID,
                o.AxaptaSalesId,
                y.ItemNumber,
                x.Name,
                x.ProductFormatName,
                y.Quantity,
                y.Price,
                Status = dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).Substring(0, dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).LastIndexOf("|")),
                Levering = dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).Substring(dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).LastIndexOf("|")).Replace("|", "")
            };

Другая таблица будет иметь ту же информацию. Он называется AxSale.

Я надеюсь, что это возможно, и кто-то может мне помочь:)

РЕДАКТИРОВАТЬ: новая "проблема"

Мне бы не хотелось, чтобы переменная созданнаяДата была первым элементом x.CreatedDate в первой последовательности linq. или второй. Как мне это сделать?

var created = purchases.OrderByDescending(x => x.CreatedDate).
                Select(x => new { x.CreatedDate, x.LineSupplierAccountNO }).
                GroupBy(x => x.LineSupplierAccountNO);

if (created.Count() > 1)
{
    created = purchases.OrderBy(x => x.CreatedDate).
                Select(x => new { x.CreatedDate, x.LineSupplierAccountNO }).
                GroupBy(x => x.LineSupplierAccountNO);
}

var createdDate = created.FirstOrDefault();

Код решения:

var created = purchases.OrderBy(x => x.CreatedDate).Select(x => x);

if (created.GroupBy(x => x.LineSupplierAccountNO).Count() > 1)
{
    created = purchases.OrderByDescending(x => x.CreatedDate).Select(x => x);
}

var createdDate = created.First().CreatedDate;

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Используйте оператор UNION для объединения результатов с одинаковыми полями. Вот пример из http://code.msdn.microsoft.com/windowsdesktop/101-LINQ-Samples-3fb9811b

public void Linq49() 
{ 
    List<Product> products = GetProductList(); 
    List<Customer> customers = GetCustomerList(); 

    var productFirstChars = 
        from p in products 
        select p.ProductName[0]; 
    var customerFirstChars = 
        from c in customers 
        select c.CompanyName[0]; 

    var uniqueFirstChars = productFirstChars.Union(customerFirstChars); 

    Console.WriteLine("Unique first letters from Product names and Customer names:"); 
    foreach (var ch in uniqueFirstChars) 
    { 
        Console.WriteLine(ch); 
    } 
}
1 голос
/ 24 ноября 2011

Я полагаю, вы ищете Союз

Попробуйте ссылку

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