Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 复杂的LINQ-TO-SQL解决方案……还是我的经验不足?_C#_Linq_Tsql_Linq To Sql - Fatal编程技术网

C# 复杂的LINQ-TO-SQL解决方案……还是我的经验不足?

C# 复杂的LINQ-TO-SQL解决方案……还是我的经验不足?,c#,linq,tsql,linq-to-sql,C#,Linq,Tsql,Linq To Sql,学习LINQ-TO-SQL并相处良好。但现在我想我正处于“先走后跑”的阶段 这种LINQ-TO-SQL的工作原理是: var arr = (from up in db.fad_user_physician join u in db.fad_user on up.userID equals u.userID where up.physicianID.ToString() == userIdString select new List

学习LINQ-TO-SQL并相处良好。但现在我想我正处于“先走后跑”的阶段

这种LINQ-TO-SQL的工作原理是:

var arr = (from up in db.fad_user_physician
           join u in db.fad_user on up.userID equals u.userID
           where up.physicianID.ToString() == userIdString
           select new ListOfUsersForPhysician
           {
               userID = u.userID,
               forename = u.forename,
               surname = u.surname,
               email = u.email,
               gender = u.gender,
               dobStr = u.dob.ToString()
           }).ToList();
我现在想把一个计算加入其中。 因此,TSQL(有效)是:

(注意:physicianID是我唯一需要使用的东西,从他们的登录详细信息中获取)

编辑日期:17/2/16:03:

select fuf.userid,
    ((CAST(COUNT(fuf.userid)AS DECIMAL(6,2))/
    (DATEDIFF(dd,fu.dateJoined,GETDATE())*5))*100) AS 'percent'
from fad_user_physician fup
inner join fad_user fu on fu.userID = fup.userID
inner join fad_userFoods fuf on fuf.userID = fu.userID
inner join fad_food ff on ff.foodID = fuf.FoodID
where fup.physicianID = '5C46F531-FF64-4254-8072-F291627ABD3D'
AND fuf.quantityAmount >= ff.portionSize
group by fuf.userID,fu.dateJoined
所以基本上我想要一个医生的用户列表,还有一个%的计算

我已经在谷歌上搜索了一个多小时了,包括教程等等。但是刚刚陷入LINQ-TO-SQL的复杂性(对于新手来说!)

我应该使用LET语句吗? 我应该在select部分中使用LINQ-TO-SQL语句吗? 我试过:

maxpos给了我正确的值。 但是temp给了我0

任何指导都将不胜感激!
提前感谢。

您应该能够使用导航属性执行以下操作

var results = from fu in db.fad_user
              from fuf in fu.fad_userFoods
              from ff in fuf.fad_foods
              where fuf.userId = someGuid && fuf.quantityAmount >= ff.portionSize
              group fu.userid by new {fuf.userID, fu.dateJoined} into g
              select new 
              {
                  g.Key.userid,
                  Percent = 100 * ((decimal)(g.Count()) 
                            / (DbFunctions.DiffDays(g.Key.dateJoined, DateTime.Now) * 5))
              };
var results = from fu in db.fad_user 
              join fuf in db.fad_userFoods on fuf.userID equals fu.userID 
              join ff in db.fad_food on fuf.foodID equals ff.foodID 
              where fuf.userId = someGuid && fuf.quantityAmount >= ff.portionSize
              group fu.userid by new {fuf.userID, fu.dateJoined} into g
              select new 
              {
                  g.Key.userid,
                  Percent = 100 * ((decimal)(g.Count())
                            / (DbFunctions.DiffDays(g.Key.dateJoined, DateTime.Now) * 5))
              };
或者,如果没有导航属性,请使用
join

var results = from fu in db.fad_user
              from fuf in fu.fad_userFoods
              from ff in fuf.fad_foods
              where fuf.userId = someGuid && fuf.quantityAmount >= ff.portionSize
              group fu.userid by new {fuf.userID, fu.dateJoined} into g
              select new 
              {
                  g.Key.userid,
                  Percent = 100 * ((decimal)(g.Count()) 
                            / (DbFunctions.DiffDays(g.Key.dateJoined, DateTime.Now) * 5))
              };
var results = from fu in db.fad_user 
              join fuf in db.fad_userFoods on fuf.userID equals fu.userID 
              join ff in db.fad_food on fuf.foodID equals ff.foodID 
              where fuf.userId = someGuid && fuf.quantityAmount >= ff.portionSize
              group fu.userid by new {fuf.userID, fu.dateJoined} into g
              select new 
              {
                  g.Key.userid,
                  Percent = 100 * ((decimal)(g.Count())
                            / (DbFunctions.DiffDays(g.Key.dateJoined, DateTime.Now) * 5))
              };

这不是普通的林克。您可能希望添加LINQ-to-SQL标记,甚至为TSQL添加一个。以及SQL模式。谢谢你们两位,把长队重新编排。添加了标签。感谢juharr重新格式化了我的代码你的关系在哪里?如果添加了正确的外键,则将表拖放到dbmx文件时将获得关系。然后,您可以通过“从表2中的t选择新的{t.table1.someproperty}”对表进行内部联接。无论如何,您都可以在linq select new语句中找到问题的解决方案。在那里,您可以对每条记录进行计算,并将它们作为单独的属性添加到(内存中)集合中。在
temp
查询中,您没有按userId和datejoin进行分组。