0
int ddlshopID = ddlSupervisorShop.SelectedItem == null ? 0 : ddlSupervisorShop.SelectedValue.ToInt32();
DateTime today = DateTime.Now;
List<int> supervisorShopList = shops.Select(a => a.ShopID).ToList<int>();
totalSales = (from ds in db.DailySales
              join p in db.Products on ds.ProductID equals p.ProductID
              where ds.IsActive == true && 
                    p.IsActive == true && 
                    ds.SaleDate.Value.Month == today.Month && 
                    ds.SaleDate.Value.Year == today.Year &&
                    ddlshopID == 0 ? supervisorShopList.Contains(ds.ShopID) : ds.ShopID == ddlshopID
              group ds by new
              {
                  p.ProductCategoryID,
                  p.IsActive,
              }
              into g
              select new TotalPriceDivision
              {
                  TotalPrice = g.Sum(a => a.Quantity * a.PerPrice),
                  DivisionID = g.Key.ProductCategoryID
              }).ToList<TotalPriceDivision>();

このコードでは、次の行

ds.SaleDate.Value.Month == today.Month && ds.SaleDate.Value.Year == today.Year 

クエリ結果には影響しません。ds.SaleDateデータベース内の null 許容の日付値 (datetime ではない) です。そのせいでしょうか?はいの場合、どうすればこれを解決できますか?

4

2 に答える 2

1
where ds.IsActive && // don't compare boolean with true
      p.IsActive &&
      ds.SaleDate.HasValue && // add this condition
      ds.SaleDate.Value.Month == today.Month && 
      ds.SaleDate.Value.Year == today.Year &&
      ddlshopID == 0 ? supervisorShopList.Contains(ds.ShopID) : ds.ShopID == ddlshopID
于 2012-11-14T13:34:44.237 に答える
0

これで何が問題なのかがわかりました。

驚くほど、信じられないほど、そして愚かに

クエリを次のように注文した場合

where ds.IsActive == true
&& p.IsActive == true
&& ds.SaleDate.Value.Month == today.Month
&& ds.SaleDate.Value.Year == today.Year
&& ddlshopID == 0 ? supervisorShopList.Contains(ds.ShopID) : ds.ShopID == ddlshopID

日付条件はクエリ結果に影響せず、間違った結果を返します。

私はそれを次のように注文します

where ds.IsActive == true
&& p.IsActive == true
&& ddlshopID == 0 ? supervisorShopList.Contains(ds.ShopID) : ds.ShopID == ddlshopID
&& ds.SaleDate.Value.Month == today.Month
&& ds.SaleDate.Value.Year == today.Year

それは私が期待したように動作します

私はまだそれがどのように可能か信じられません。また、別の理由があるに違いないと思われる場合は、説明してください。

于 2012-11-14T16:01:18.283 に答える