我经常对System.Diagnostics.Debug.Write/WriteLine方法感到沮丧.我想使用TextWriter类中熟悉的Write/WriteLine方法,所以我经常写
Debug.WriteLine("# entries {0} for connection {1}", countOfEntries, connection);
Run Code Online (Sandbox Code Playgroud)
这会导致编译器错误.我最终写作了
Debug.WriteLine(string.Format("# entries {0} for connection {1}",
countOfEntries, connection));
Run Code Online (Sandbox Code Playgroud)
这真的很尴尬.
CLR是否有一个派生自TextWriter的类"包装"System.Debug,还是应该自己滚动?
如果我在实体框架中有三个类.
class Base {}
class Left : Base {}
class Right : Base {}
Run Code Online (Sandbox Code Playgroud)
我打电话给 DBContext.Bases.ToList();
这会将Base完全键入的所有实例返回到其关联的继承类型中,正如一些人已经注意到的,EF对大型继承结构的性能至少可以说不是很好.我在我的项目中的实际查询是600行,只是为了返回一个实体,需要2秒生成.
如果你告诉它返回哪种类型,它们的查询运行速度要快得多,因为它不必连接整个结构.例如
DBContext.Bases.OfType<Left>.ToList();
or
DBContext.Bases.OfType<Right>.ToList();
Run Code Online (Sandbox Code Playgroud)
但是我现在想只返回基类.不幸做的
DBContext.Bases.OfType<Base>.ToList();
Run Code Online (Sandbox Code Playgroud)
与DBContext.Bases.ToList()相同;
它获得了WHOLE继承结构...... 在查看Base集合时,是否有任何方法(不在EF中创建新类型)只返回类Base?
对不起,我无法登录我的实际帐户...
也许我没有说清楚,我想带回所有对象(包括Base,Left和Right),但我只想返回Base类,即使在数据库中它们是实际的Left和Right类.
OFTYPE是一个很好的建议,但它过滤掉了我的所有实体,因为没有一个是实际的Base类型.但我想只返回Base类型对象中的Base类型值.
有任何想法吗?
我想从某个(Blobs)表中只选择几列.我有以下字段:Id,RowVersion,Size,Signature,Blob,我想只选择前四个.我这样做:( --->是一个错误的地方)
public List<BlobDetails> GetAllBlobsNames()
{
RichTekstModelDataContext dc = new RichTekstModelDataContext();
var allBlobs = from b in dc.Blobs
orderby b.RowVersion descending
select new {b.Id, b.Size, b.Signature, b.RowVersion};
---> allBlobs.ToList<BlobDetails>();
}
public class BlobDetails
{
public int Id { get; set; }
public string Signature { get; set; }
public int Size { get; set; }
public System.Data.Linq.Binary RowVersion { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我尝试返回BlobDetails时发生错误 - 因为VS.08不知道如何从匿名类型(allBlobs)转换为List.
我不想选择所有值,因为Blob字段可能很重,我不想一直发送它.
你知道如何正确地做到这一点吗?
我一直很好奇Dapper(或许其他ORM)在与LINQ结合时如何处理对象检索.
如果我有这样的课程:
public static IEnumerable<SitePage> GetAll()
{
using (IDbConnection cn = new SqlConnection(g.Global.CONX))
{
cn.Open();
return cn.GetAll<SitePage>();
}
}
Run Code Online (Sandbox Code Playgroud)
我构建一个这样的查询:
var result = SitePage.GetAll().Select(c=> new { c.id, c.PageUrl, c.ParentId });
Run Code Online (Sandbox Code Playgroud)
我很好奇,如果在后台,整个记录集被拉入包括所有其他列(可能包含非常大的varchars),或者Dapper是否从这个查询中理解只是为了从sql db中提取我请求的列?我意识到它有点像新手,但我想更好地理解Dapper/LINQ交互.
这里发布了一个类似的问题:选择特定列 - 使用linq-what-gets-transferred,但我不确定是否已经完全回答.海报有2个问题,也没有使用我通常喜欢的lambda表达式.
对此的回答将使我的思绪发火(并且很可能改变我编码的方式,因为我一直谨慎并且觉得我通过显式sql编写了太多代码).