我被要求生成一个由针对SQL Server数据库的相当复杂的SQL查询驱动的报告.由于报告的网站已经在使用Entity Framework 4.1,我想我会尝试使用EF和LINQ编写查询:
var q = from r in ctx.Responses
.Where(x => ctx.Responses.Where(u => u.UserId == x.UserId).Count() >= VALID_RESPONSES)
.GroupBy(x => new { x.User.AwardCity, x.Category.Label, x.ResponseText })
orderby r.FirstOrDefault().User.AwardCity, r.FirstOrDefault().Category.Label, r.Count() descending
select new
{
City = r.FirstOrDefault().User.AwardCity,
Category = r.FirstOrDefault().Category.Label,
Response = r.FirstOrDefault().ResponseText,
Votes = r.Count()
};
Run Code Online (Sandbox Code Playgroud)
此查询统计投票,但仅限于已提交一定数量的所需最低投票数的用户.
从性能角度来看,这种方法是一场彻底的灾难,因此我们切换到ADO.NET并且查询运行得非常快.我确实使用SQL Profiler查看了LINQ生成的SQL,尽管它看起来像往常一样残酷,但我没有看到任何关于如何优化LINQ语句以提高效率的线索.
这是直接的TSQL版本:
WITH ValidUsers(UserId)
AS
(
SELECT UserId
FROM Responses
GROUP BY UserId
HAVING COUNT(*) >= 103
)
SELECT d.AwardCity
, c.Label
, r.ResponseText
, COUNT(*) AS Votes
FROM …Run Code Online (Sandbox Code Playgroud) 我正在创建一个WPF应用程序,并尝试将用户界面的样式与现有网站相匹配.该网站使用Lato作为其默认字体,默认情况下在Windows上不可用.我想使用Lato,但我不能要求用户安装该字体.有没有办法让WPF使用通过Google Web Font服务提供的字体定义,或以其他方式设置它,以便不需要手动安装字体?
我有多个Linq2Sql类,如"Article""NewsItem""Product".
他们都有一个标题,他们都有一个唯一的ID,他们都有一个摘要.
所以,我创建了一个名为的接口 IContent
public interface IContent {
int Id { get; set; }
String Title { get; set; }
String Summary { get; set; }
String HyperLink { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我试图传递一个List<T>实现IContent,然后使用我在项目中的每个部分类中实现的那些公共属性.
所以,只是澄清一下
Article是Linq实体.我创建了一个部分类并实现了IContent以下是Article.cs的片段:
#region IContent Members
public int Id {
get {
return this.ArticleID;
}
set {
this.ArticleID = value;
}
}
Run Code Online (Sandbox Code Playgroud)
很简单.在我的代码中,我正在尝试这个,但我不知道我哪里出错了:
List<IContent> items;
MyDataContext cms = new MyDataContext();
items = cms.GetArticles();
// ERROR: Can not implicitly convert List<Article> …Run Code Online (Sandbox Code Playgroud) 我很惊讶地发现Object类使用Serializable属性进行修饰.尽管对象实例可能很有用(例如,对于线程同步),但它们没有可以有意义地存储或重新水合的状态.如果CLR Object类没有被标记为可序列化,会遇到什么问题?
当我使用PRINT语句调试和监视SQL Server Management Studio中长时间运行的查询时,我注意到输出没有立即出现在"消息"选项卡中.有没有办法将输出刷新到消息选项卡,或设置环境,以便它不缓冲消息?
c# ×2
.net ×1
clr ×1
covariance ×1
debugging ×1
interface ×1
linq ×1
linq-to-sql ×1
optimization ×1
polymorphism ×1
sql-server ×1
t-sql ×1
webfonts ×1
wpf ×1