[问题] FirstOrDefault vs Get all疑问

楼主: windofsmile (微笑之风)   2018-10-17 11:54:49
各位版上的前辈们好
遇到一个瓶颈想请教一下各位大大
大致上的情况是
我有个Service已经成功取出我要的资料 但在筛选的时候出了问题
注解:A Table == 总表 == Taiwan
B Table == 关联资料表 == Taiwan下的 Taipei
section == Taipei 的区域字段 == 在Code中是public Enum
我的目标:
1.新店区所有记录 费用加总 大安区所有记录 费用加总
2.台北区所有费用加总
我的Code大概长这样:
取出资料后
foreach (var m in viewModel.Taiwan)
{
if(m.Taipei !=null) //Taipei是关联的资料表
{
if(m.Taipei.FirstOrDefault().section.Tostring().Equals("HsinTien"))
//因为是Enum所以需要Tostring()
{
Money1 = 0 ;
Money1 += Convert.ToInt32(m.section.FirstOrDefault().Price)
//将Taipei中,记录为"新店区"的费用都加进来
}
if(m.Taipei.FirstOrDefault().section.Tostring().Equals("TaAn"))
{
Money2 = 0 ;
Money2 += Convert.ToInt32(m.section.FirstOrDefault().Price)
}
}
//最后再去做各区费用加总
//在SQL的Table中 HsinTien或TaAn或其他区域的记录会有不止一笔 即重复值
}
目前遇到的情况是
在取得子资料表(Taipei)时,监看式内呈现的资料都正确
像是新店区共3笔 大安区共5笔之类
但在进一步筛选时就爆炸了 目前下中断点 发现问题出在我使用了
FirstOrDefault这个方法,所以导致他只会取得第一笔资料
后面第二笔新店 第二笔大安等重复的资料以及判断式内 该区域的Price就不会累加进来
有查了许多方法,但不知道除了FirstOrDefault LastOrDefault SingleOrDefault等
取得单项的方法之外 有没有哪个方法 或是关键字可以让我取到所有资料的呢?
查过elementAt 但这个是指定第几个元素
另外 也有尝试过
直接if(m.Taipei.section.Equals("区域名"))
但m.Taipei.section会显示ICollection<Taipei>未包含section的定义
没办法直接取得section字段
不知道版上的大大们有没有什么推荐的关键字 或是方法
可以让小弟有个方向再找看看解法的呢?
先谢过愿意回复的大大们<_O_>
作者: YahooTaiwan (超可爱南西我老婆)   2018-10-17 12:46:00
foreach?
作者: jun112561 (孤之界)   2018-10-17 13:39:00
你用的三个方法都是针对抓取单一资料的,我个人的话会选择用Where(System.Linq)里的扩充函式,然后用Foreach加总
作者: petercoin (彼得币)   2018-10-17 13:57:00
同上 但是我会直接转成List然后呼叫用.Sum()直接加总
作者: ian90911 (xopowo)   2018-10-17 14:01:00
where过滤只有新店大安 然后groupby select sum
作者: Litfal (Litfal)   2018-10-17 15:43:00
用groupby比较正确为什么你不从 Taipei 甚至 section 的表来捞就好...
作者: CloudyWing (孤单ㄉ翼)   2018-10-17 22:21:00
如果要处理的字段不多的话https://dotnetfiddle.net/hkwLiv
作者: Litfal (Litfal)   2018-10-17 22:24:00
数据库设计,应该是section *-0..1 Taipei *-1 Taiwan 吧
作者: CloudyWing (孤单ㄉ翼)   2018-10-17 22:39:00
或著是这样https://dotnetfiddle.net/8sbYlC话说我总觉得你表设计怪怪的,应该是Litfal大那样才对

Links booklink

Contact Us: admin [ a t ] ucptt.com