【发布时间】:2010-08-11 13:11:19
【问题描述】:
我在 ms SQL 2008 中有以下有效的 TSQL 查询
SELECT
Date,
COUNT(click) AS clicks,
COUNT(sale) AS sales,
count(lead) as leads
FROM
(
SELECT ClickDate as date ,ID AS click ,CAST(NULL AS int) AS sale , CAST(null as int) as lead
FROM clicks
UNION ALL
SELECT Date,null, ID ,NULL
FROM sales
UNION ALL
SELECT Date,null, NULL ,ID
FROM leads
) t
GROUP BY Date
如何将其转换为 LINQ to SQL? 我写了这个 LINQ,但它不起作用。
public class mydata
{
public DateTime date { get; set; }
public int? click { get; set; }
public int? sale { get; set; }
public int? lead { get; set; }
}
var clicks = from c in Clicks
select new mydata
{
date = c.ClickDate, click = c.ID, sale = null, lead = null
};
var sales = from s in Sales
select new mydata
{
date = s.Date, click = null, sale = s.ID, lead = null
};
var leads = from l in Leads
select new mydata
{
date = l.Date, click = null, sale = null, lead = l.ID
};
var v = clicks.Concat(sales).Concat(leads);
var res = from x in v
group x by x.date into xg
select new
{
date = xg.Key, clicks = xg.Count(z => z.click != null)
};
}
如何更正此 LINQ 查询?
更新: 我根据 David B 的建议修改了 LINQ 查询。
我仍然收到以下错误: “使用 UNION、INTERSECT 或 EXCEPT 运算符组合的所有查询必须在其目标列表中具有相同数量的表达式。”
【问题讨论】:
-
您的查询出了什么问题?
-
1.分组错误“使用 UNION、INTERSECT 或 EXCEPT 运算符组合的所有查询必须在其目标列表中具有相等数量的表达式。” 2. 关于不允许的空值的错误 3. 关于 kg.Count() 的错误,“无法将 int 转换为 bool”。
标签: c# sql-server linq tsql linq-to-sql