小编Pau*_*ter的帖子

有没有办法优化这个LINQ to Entities查询?

我被要求生成一个由针对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)

c# linq optimization linq-to-entities entity-framework

5
推荐指数
1
解决办法
1430
查看次数

在WPF桌面应用程序中使用Google Web Font的任何方法

我正在创建一个WPF应用程序,并尝试将用户界面的样式与现有网站相匹配.该网站使用Lato作为其默认字体,默认情况下在Windows上不可用.我想使用Lato,但我不能要求用户安装该字体.有没有办法让WPF使用通过Google Web Font服务提供的字体定义,或以其他方式设置它,以便不需要手动安装字体?

wpf webfonts

4
推荐指数
1
解决办法
3024
查看次数

传递实现相同界面的不同内容

我有多个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)

c# polymorphism interface covariance linq-to-sql

3
推荐指数
1
解决办法
341
查看次数

为什么CLR对象类型可序列化?

我很惊讶地发现Object类使用Serializable属性进行修饰.尽管对象实例可能很有用(例如,对于线程同步),但它们没有可以有意义地存储或重新水合的状态.如果CLR Object类没有被标记为可序列化,会遇到什么问题?

.net clr serialization

2
推荐指数
1
解决办法
160
查看次数

刷新SQL Management Studio消息缓冲区

当我使用PRINT语句调试和监视SQL Server Management Studio中长时间运行的查询时,我注意到输出没有立即出现在"消息"选项卡中.有没有办法将输出刷新到消息选项卡,或设置环境,以便它不缓冲消息?

t-sql sql-server debugging

1
推荐指数
1
解决办法
4770
查看次数