NHibernate QueryOver и выбор строк, в которых свойство - это ILIST, а список -> = 1 - PullRequest
0 голосов
/ 18 июня 2019

Я хотел бы выбрать строки, для которых свойство Items, являющееся IList, само имеет строки.В SQL его простое число> = 1, но в NHibernate оно ускользает от меня.

Попробовал много способов

public class Sale
{
    private IList<Items> _items;

    public Sale()
    {
        _items = new List<Item>();
    }

    public Guid SaleId { get; set; }
    public string SaleNumber { get; set; }
    public string Location { get; set; }
    public DateTime? SaleDateTime { get; set; }

    public IList<Item> Items => _items;
}

public class Item
{
    public Guid ItemId { get; set; }
    public string description { get; set; }
}

        var testdata = _session.QueryOver<Sale>()
            .Where(Restrictions.Ge(
                Projections.Property<Sale>
                (m => m.Items.Count), 1))
            .ReadOnly()
            .ListAsync();

Count не распознано

1 Ответ

0 голосов
/ 19 июня 2019

Технически, если вы сделали внутреннее объединение, вы не получили бы никаких записей Sale, которые не имеют Item записей.

Так что в качестве действительно простого QueryOver вы могли бы сделать:

var sales = session.QueryOver<Sale>()
  .Inner.JoinQueryOver(x => x.Items)
  .Select(Projections.RootEntity())
  .TransformUsing(Transformers.DistinctRootEntity)
  .List();

Это результирующий SQL:

SELECT this_.SaleId as saleid1_1_0_, 
  this_.SaleNumber as salenumber2_1_0_, 
  this_.Location as location3_1_0_, 
  this_.SaleDateTime as saledatetime4_1_0_ 
FROM Sale this_ 
 inner join Item item1_ on this_.SaleId=item1_.SaleId
...