Skip to content

Commit 6da91a0

Browse files
Ihar YakimushIhar Yakimush
authored andcommitted
select
1 parent 77949a3 commit 6da91a0

File tree

5 files changed

+26
-21
lines changed

5 files changed

+26
-21
lines changed

README.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,17 @@ IQueryable<Product> solrLinq = solr.AsQueryable(setup =>
103103
Product[] result = solrLinq.Where(p => p.Categories.Any(s => s == "qwe")).ToArray();
104104
```
105105
### Select
106-
- Anonymous type with fields, pseudo field, functions and transformers
106+
- Anonymous and regular types with fields, pseudo field, functions and transformers
107107
```
108108
var result = solrLinq.Select(p =>
109109
new {
110110
p.Id,
111111
p.Categories,
112-
Qwe = Math.Pow(2,2), // function
113-
ValStr = SolrExpr.Transformers.Value("qwe"), // value transformer
114-
Score= SolrExpr.Fields.Score() // score pseudo field
115-
}).OrderBy(arg => arg.Score).ToSolrQueryResults();
112+
Qwe = Math.Pow(2,2), // will be evaluated locally
113+
ValStr = SolrExpr.Transformers.Value("qwe"), // value transformer evaluated in solr
114+
Score= SolrExpr.Fields.Score() // score pseudo field evaluated in solr
115+
}).OrderBy(arg => arg.Score) // allowed to use expressions evaluated in solr for ordering
116+
.ToSolrQueryResults();
116117
```
117118
### Select
118119
- Existing type by member initialization
@@ -123,9 +124,9 @@ IQueryable<Product> solrLinq = solr.AsQueryable(setup =>
123124
```
124125
var result = solrLinq
125126
.Where(p => p.Id != null)
126-
.Select(p => new {p.Id, p.Price, p.Categories, Qwe = Math.Pow(2, 2)})
127+
.Select(p => new {p.Id, p.Price, p.Categories, Score= SolrExpr.Fields.Score()})
127128
.Where(arg => arg.Categories.Any(s => s == "electronics"))
128-
.OrderBy(arg => arg.Id).ThenBy(arg=>arg.Qwe)
129+
.OrderBy(arg => arg.Id).ThenBy(arg=>arg.Score)
129130
.Select(arg => new {arg.Id})
130131
.FirstOrDefault(arg2 => arg2.Id != null);
131132
```

SolrNet.Linq.IntegrationTests/SelectTests.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -236,20 +236,19 @@ public void Product2WithMemberProduct()
236236
{
237237
Assert.Throws<SolrConnectionException>(() => Product.SolrOperations.Value.AsQueryable(lo => lo.SetupQueryOptions = qo =>
238238
{
239-
Assert.Equal(4, qo.Fields.Count);
240-
Assert.Equal("Price:sum(price,1)", qo.Fields.ElementAt(0));
241-
Assert.Equal("Qwe:pow(2,2)", qo.Fields.ElementAt(1));
242-
Assert.Equal("Id:id", qo.Fields.ElementAt(2));
243-
Assert.Equal("Categories:cat", qo.Fields.ElementAt(3));
239+
Assert.Equal(3, qo.Fields.Count);
240+
Assert.Equal("id", qo.Fields.ElementAt(0));
241+
Assert.Equal("price", qo.Fields.ElementAt(1));
242+
Assert.Equal("v0:score", qo.Fields.ElementAt(2));
244243

245-
Assert.Equal(2, qo.OrderBy.Count);
244+
Assert.Equal(3, qo.OrderBy.Count);
246245
Assert.Equal("id", qo.OrderBy.ElementAt(0).FieldName);
247246
Assert.Equal("sum(price,1)", qo.OrderBy.ElementAt(1).FieldName);
247+
Assert.Equal("sum(score,1)", qo.OrderBy.ElementAt(2).FieldName);
248248
}).Where(p => p.Id != null)
249249
.Select(p =>
250-
new Product2 {Id = p.Id, Price = p.Price + 1, Categories = p.Categories})
251-
.Where(arg => arg.Categories.Any(s => s == "electronics"))
252-
.OrderBy(arg => arg.Id).ThenBy(arg => arg.Price)
250+
new Product2 {Id = p.Id, Price = p.Price + 1, Score = SolrExpr.Fields.Score() + 1})
251+
.OrderBy(arg => arg.Id).ThenBy(arg => arg.Price).ThenBy(arg => arg.Score)
253252
.FirstOrDefault());
254253
}
255254
}

SolrNet.Linq/Expressions/Context/SelectContext.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class SelectContext : MemberContext
1414
public Dictionary<MemberInfo, string> Members { get; } = new Dictionary<MemberInfo, string>();
1515
public Dictionary<MemberInfo, string> Aliases { get; } = new Dictionary<MemberInfo, string>();
1616

17-
public List<Expression> Calculated { get; } = new List<Expression>();
17+
public Dictionary<MemberInfo, Expression> Calculated { get; } = new Dictionary<MemberInfo, Expression>();
1818

1919
public SelectContext(NewExpression expression, MemberContext parentContext)
2020
{
@@ -36,7 +36,7 @@ public SelectContext(NewExpression expression, MemberContext parentContext)
3636
}
3737
else
3838
{
39-
Calculated.Add(argument);
39+
Calculated.Add(expression.Members[i], argument);
4040
}
4141
}
4242
}
@@ -60,7 +60,7 @@ public SelectContext(MemberInitExpression expression, MemberContext parentContex
6060
}
6161
else
6262
{
63-
Calculated.Add(binding.Expression);
63+
Calculated.Add(binding.Member, binding.Expression);
6464
}
6565
}
6666
}
@@ -84,6 +84,11 @@ public override string GetSolrMemberProduct(Expression expression, bool disableF
8484
{
8585
return Aliases[me.Member];
8686
}
87+
88+
if (Calculated.ContainsKey(me.Member) && disableFunctions == false)
89+
{
90+
return ParentContext.GetSolrMemberProduct(Calculated[me.Member]);
91+
}
8792
}
8893

8994
return expression.GetSolrMemberProduct(this, disableFunctions);

SolrNet.Linq/Expressions/MemberExpressionExtensions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ public static class MemberExpressionExtensions
4848

4949
};
5050

51-
5251
internal static string GetSolrMemberProduct(this Expression exp, MemberContext context, bool disableFunctions = false)
5352
{
5453
try

SolrNet.Linq/SolrNet.Linq.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
1414
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
1515
<Version>1.3.0</Version>
16-
<PackageReleaseNotes>support Any(), Count(), LongCount() methods and its async versions</PackageReleaseNotes>
16+
<PackageReleaseNotes>Added support for Select() method. Compatible with OData way of building select expression.
17+
Added support for Any(), Count(), LongCount() methods and its async versions</PackageReleaseNotes>
1718
</PropertyGroup>
1819

1920
<ItemGroup>

0 commit comments

Comments
 (0)