LINQ
public static byte[] MineralsCategories = new byte[] {4};
...
using (var ctx = DbContext)
{
var q = from invGroup in ctx.invGroups
where MaterialsCategory.Contains(invGroup.categoryID)
join invType in ctx.invTypes on invGroup.groupID equals invType.groupID
join p2 in ctx.invTypesPrices on invType.typeID equals p2.typeID into invTypePricesInto
from invTypePrices in invTypePricesInto.DefaultIfEmpty()
where invTypePrices.changeDate ==
(from price2 in ctx.invTypesPrices
where price2.typeID == invType.typeID
select price2.changeDate).Max()
orderby invType.typeName
let r = ShortInvType.I
.Init(invType.typeID, invType.typeName, invTypePrices.price)
select r;
return q.ToList();
}
[TableName(Name="invGroups")]
public partial class invGroups
{
[ PrimaryKey(1)] public short groupID { get; set; }
public byte categoryID { get; set; }
[Nullable ] public string groupName { get; set; }
[Nullable ] public string description { get; set; }
[Nullable ] public int? iconID { get; set; }
[Nullable ] public bool? useBasePrice { get; set; }
[Nullable ] public bool? allowManufacture { get; set; }
[Nullable ] public bool? allowRecycler { get; set; }
[Nullable ] public bool? anchored { get; set; }
[Nullable ] public bool? anchorable { get; set; }
[Nullable ] public bool? fittableNonSingleton { get; set; }
[Nullable ] public bool? published { get; set; }
}
[TableName(Name="invTypes")]
public partial class invTypes
{
[ PrimaryKey(1)] public short typeID { get; set; }
[Nullable ] public short? groupID { get; set; }
[Nullable ] public string typeName { get; set; }
[Nullable ] public string description { get; set; }
[Nullable ] public int? graphicID { get; set; }
[Nullable ] public double? radius { get; set; }
[Nullable ] public double? mass { get; set; }
[Nullable ] public double? volume { get; set; }
[Nullable ] public double? capacity { get; set; }
[Nullable ] public int? portionSize { get; set; }
[Nullable ] public byte? raceID { get; set; }
[Nullable ] public decimal? basePrice { get; set; }
[Nullable ] public bool? published { get; set; }
[Nullable ] public short? marketGroupID { get; set; }
[Nullable ] public double? chanceOfDuplicating { get; set; }
[Nullable ] public int? iconID { get; set; }
}
[TableName(Name="invTypesPrices")]
public partial class invTypesPrices
{
[PrimaryKey(1)] public short typeID { get; set; }
public decimal price { get; set; }
[PrimaryKey(2)] public DateTime changeDate { get; set; }
}
падает с такой ошибкой
Cant create IN expression.
Call Stack
> BLToolkit.4.dll!BLToolkit.Data.Sql.SqlQuery.ConvertInListPredicate(BLToolkit.Data.Sql.SqlQuery.Predicate.InList p = {BLToolkit.Data.Sql.SqlQuery.Predicate.InList}) Line 3780 C#
BLToolkit.4.dll!BLToolkit.Data.Sql.SqlQuery.ProcessParameters.AnonymousMethod__2d(BLToolkit.Data.Sql.IQueryElement e = {BLToolkit.Data.Sql.SqlQuery.Predicate.InList}) Line 3751 + 0x30 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Sql.QueryVisitor.ConvertInternal.AnonymousMethod__9(BLToolkit.Data.Sql.IQueryElement e = {BLToolkit.Data.Sql.SqlQuery.Predicate.InList}) Line 904 + 0x11 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Sql.QueryVisitor.Find(BLToolkit.Data.Sql.IQueryElement element = {BLToolkit.Data.Sql.SqlQuery.Predicate.InList}, System.Func<BLToolkit.Data.Sql.IQueryElement,bool> find = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 336 + 0x1a bytes C#
BLToolkit.4.dll!BLToolkit.Data.Sql.QueryVisitor.Find(BLToolkit.Data.Sql.IQueryElement element = {BLToolkit.Data.Sql.SqlQuery.Condition}, System.Func<BLToolkit.Data.Sql.IQueryElement,bool> find = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 346 + 0x67 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Sql.QueryVisitor.Find<BLToolkit.Data.Sql.SqlQuery.Condition>(System.Collections.Generic.IEnumerable<BLToolkit.Data.Sql.SqlQuery.Condition> arr = Count = 2, System.Func<BLToolkit.Data.Sql.IQueryElement,bool> find = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 326 + 0xe bytes C#
BLToolkit.4.dll!BLToolkit.Data.Sql.QueryVisitor.Find(BLToolkit.Data.Sql.IQueryElement element = {BLToolkit.Data.Sql.SqlQuery.SearchCondition}, System.Func<BLToolkit.Data.Sql.IQueryElement,bool> find = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 345 + 0x6c bytes C#
BLToolkit.4.dll!BLToolkit.Data.Sql.QueryVisitor.Find(BLToolkit.Data.Sql.IQueryElement element = {BLToolkit.Data.Sql.SqlQuery.WhereClause}, System.Func<BLToolkit.Data.Sql.IQueryElement,bool> find = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 351 + 0x5b bytes C#
BLToolkit.4.dll!BLToolkit.Data.Sql.QueryVisitor.Find(BLToolkit.Data.Sql.IQueryElement element = SQL = "(8) SELECT \r\n\tt8.t7.typeID as typeID, \n\tt8.t7.typeName as typeName, \n\tt8.t10.price as price \nFROM \n\tinvGroups as t2\r\n\t\tINNER JOIN invTypes as t7 ON (t2.groupID = t7.groupID) \r\n\t\tLEFT JOIN invTypesPrices as t10 ON (t7.typeID = t10.typeID) \nWHERE\n\t(t10.changeDate = (15) SELECT \r\n\tt15.Max(t16.changeDate) as c1 \nFROM \n\tinvTypesPrices as t16\nWHERE\n\t(t16.typeID = t7.typeID) ) AND (Convert(SmallInt, t2.categoryID) IN (@parameter[System.Int16[]])) \nORDER BY \n\tt7.typeName", System.Func<BLToolkit.Data.Sql.IQueryElement,bool> find = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 461 + 0x171 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Sql.QueryVisitor.ConvertInternal(BLToolkit.Data.Sql.IQueryElement element = SQL = "(8) SELECT \r\n\tt8.t7.typeID as typeID, \n\tt8.t7.typeName as typeName, \n\tt8.t10.price as price \nFROM \n\tinvGroups as t2\r\n\t\tINNER JOIN invTypes as t7 ON (t2.groupID = t7.groupID) \r\n\t\tLEFT JOIN invTypesPrices as t10 ON (t7.typeID = t10.typeID) \nWHERE\n\t(t10.changeDate = (15) SELECT \r\n\tt15.Max(t16.changeDate) as c1 \nFROM \n\tinvTypesPrices as t16\nWHERE\n\t(t16.typeID = t7.typeID) ) AND (Convert(SmallInt, t2.categoryID) IN (@parameter[System.Int16[]])) \nORDER BY \n\tt7.typeName", System.Func<BLToolkit.Data.Sql.IQueryElement,BLToolkit.Data.Sql.IQueryElement> action = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 902 + 0xbc bytes C#
BLToolkit.4.dll!BLToolkit.Data.Sql.QueryVisitor.Convert<BLToolkit.Data.Sql.SqlQuery>(BLToolkit.Data.Sql.SqlQuery element = SQL = "(8) SELECT \r\n\tt8.t7.typeID as typeID, \n\tt8.t7.typeName as typeName, \n\tt8.t10.price as price \nFROM \n\tinvGroups as t2\r\n\t\tINNER JOIN invTypes as t7 ON (t2.groupID = t7.groupID) \r\n\t\tLEFT JOIN invTypesPrices as t10 ON (t7.typeID = t10.typeID) \nWHERE\n\t(t10.changeDate = (15) SELECT \r\n\tt15.Max(t16.changeDate) as c1 \nFROM \n\tinvTypesPrices as t16\nWHERE\n\t(t16.typeID = t7.typeID) ) AND (Convert(SmallInt, t2.categoryID) IN (@parameter[System.Int16[]])) \nORDER BY \n\tt7.typeName", System.Func<BLToolkit.Data.Sql.IQueryElement,BLToolkit.Data.Sql.IQueryElement> action = {Method = {System.Reflection.RuntimeMethodInfo}}) Line 484 + 0xf bytes C#
BLToolkit.4.dll!BLToolkit.Data.Sql.SqlQuery.ProcessParameters() Line 3736 + 0x83 bytes C#
BLToolkit.4.dll!BLToolkit.Data.DbManager.GetCommand(BLToolkit.Data.Linq.IQueryContext query = {BLToolkit.Data.Linq.ExpressionInfo<EveManagement.Bussines.Objects.ShortInvType>.QueryInfo}) Line 66 + 0x17 bytes C#
BLToolkit.4.dll!BLToolkit.Data.DbManager.BLToolkit.Data.Linq.IDataContext.SetQuery(BLToolkit.Data.Linq.IQueryContext queryContext = {BLToolkit.Data.Linq.ExpressionInfo<EveManagement.Bussines.Objects.ShortInvType>.QueryInfo}) Line 43 + 0xb bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.ExpressionInfo<EveManagement.Bussines.Objects.ShortInvType>.SetCommand(BLToolkit.Data.Linq.IDataContext dataContext = {EveTyranisDataModel.EveTyranisDataContext}, System.Linq.Expressions.Expression expr = {System.Linq.Expressions.MethodCallExpressionN}, object[] parameters = null, int idx = 0) Line 372 + 0x25 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.ExpressionInfo<EveManagement.Bussines.Objects.ShortInvType>.Query(BLToolkit.Data.Linq.IDataContextInfo dataContextInfo = {BLToolkit.Data.Linq.DataContextInfo}, System.Linq.Expressions.Expression expr = {System.Linq.Expressions.MethodCallExpressionN}, object[] parameters = null, int queryNumber = 0) Line 333 + 0x38 bytes C#
BLToolkit.4.dll!BLToolkit.Data.Linq.ExpressionInfo<EveManagement.Bussines.Objects.ShortInvType>.Map(System.Collections.Generic.IEnumerable<System.Data.IDataReader> data = {BLToolkit.Data.Linq.ExpressionInfo<EveManagement.Bussines.Objects.ShortInvType>.Query}, BLToolkit.Data.Linq.QueryContext context = {BLToolkit.Data.Linq.QueryContext}, BLToolkit.Data.Linq.IDataContextInfo dataContextInfo = {BLToolkit.Data.Linq.DataContextInfo}, System.Linq.Expressions.Expression expr = {System.Linq.Expressions.MethodCallExpressionN}, object[] ps = null, BLToolkit.Data.Linq.ExpressionInfo<EveManagement.Bussines.Objects.ShortInvType>.Mapper<EveManagement.Bussines.Objects.ShortInvType> mapper = {Method = {System.Reflection.Emit.DynamicMethod.RTDynamicMethod}}) Line 360 + 0x104 bytes C#
[External Code]
EveManagement.StorageProvider.Sql.dll!EveManagement.StorageProviderSql.SearchPricesForMinerals() Line 132 + 0xd bytes C#
EveManagement.UI.exe!EveManagement.UI.Presenters.InvMarketPricePresenter.DoFastFilterMinerals() Line 26 + 0x3e bytes C#
EveManagement.UI.exe!EveManagement.UI.Widgets.Market.InvMarketPriceWidget.cmdFastFilterMinerals_ItemClick(object sender = {DevExpress.XtraBars.BarManager}, DevExpress.XtraBars.ItemClickEventArgs e = {DevExpress.XtraBars.ItemClickEventArgs}) Line 95 + 0x10 bytes C#
[External Code]
EveManagement.UI.exe!EveManagement.UI.Program.Main() Line 27 + 0x3f bytes C#
[External Code]
переделал на простой SQL
[SqlQuery(@"
SELECT it.typeID, it.typeName, itp.price, ig.*
FROM dbo.invGroups AS ig, dbo.invTypes AS it
LEFT OUTER JOIN dbo.invTypesPrices AS itp ON itp.typeID = it.typeID
AND itp.changeDate = (SELECT MAX(itp2.changeDate)
FROM dbo.invTypesPrices itp2
WHERE itp2.typeID = it.typeID)
WHERE ig.groupID = it.groupID
AND ig.groupID IN (@groupIds)
ORDER BY it.typeName
")]
public abstract List<ShortInvType> GetPricesForGroup(string groupIds);
здесь всё работает нормально.
Мне кажется или этот проект заброшен из-за нехватки времени?
А ведь многие подсели на него конкретно.
Просвятите пожалуйста.
Спасибо
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>