我已经看到了类似问题的一些答案,但我似乎无法弄清楚如何将答案应用于我的问题.
var allposts = _context.Posts
.Include(p => p.Comments)
.Include(aa => aa.Attachments)
.Include(a => a.PostAuthor)
.Where(t => t.PostAuthor.Id == postAuthorId).ToList();
Run Code Online (Sandbox Code Playgroud)
附件可以由作者(类型作者)或贡献者(类型贡献者)上传.我想要做的是,只获取附件所有者属于作者类型的附件.
我知道这不起作用并给出错误:
.Include(s=>aa.Attachments.Where(o=>o.Owner is Author))
Run Code Online (Sandbox Code Playgroud)
我在这里读过Filtered Projection
编辑 - 链接到文章:: http://blogs.msdn.com/b/alexj/archive/2009/10/13/tip-37-how-to-do-a-conditional-include.aspx ,
但我无法理解它.
我不想在最后的where子句中包含过滤器,因为我想要所有帖子,但我只想检索属于作者的那些帖子的附件.
编辑2: - 请求发布模式
public abstract class Post : IPostable
{
[Key]
public int Id { get; set; }
[Required]
public DateTime PublishDate { get; set; }
[Required]
public String Title { get; set; }
[Required]
public String Description { get; set; }
public Person PostAuthor { get; …Run Code Online (Sandbox Code Playgroud) 我使用 EF Code First 使用 TPT 开发了一个应用程序(发布附件、评论等)。它运行良好,并且正在与许多客户进行 beta 测试。但是,存在许多层次结构。因此,我有一个包含各种继承模型的基本模型,每个模型都包含许多属性,这些属性本身就是继承类型。
我注意到它非常慢,因此我查看了它生成的 SQL 并获取帖子列表,EF 生成了 2000 多行 SQL。编译时间非常长,我不喜欢为每个请求通过网络发送那么多数据的想法。启动时需要 5 秒才能获得 3 个帖子。后面的调用速度快了很多,但是每次有回收,速度又慢了。
我尝试过 Dapper 和手写代码,但问题是 Dapper 不适合需要依赖类型的多级查询;即 DisplayTemplates 和手写代码,虽然快速是不合适的,因为它会使未来的开发变得更加复杂。
我想尝试将一些代码(表)移至 TPH 并考虑在违反第三规范和代码可维护性之间进行权衡是可以接受的,但我找不到有关如何转换现有数据库的任何信息。
如果我从头开始,我只会删除 [Table...] 注释,但是我假设如果我使用填充的数据库执行此操作,我将丢失映射表中的所有数据,并且不会填充新的数据包含现有数据的单个表。
它是否正确?有谁知道如何将现有表从 TPT 转换为 TPH 或最佳实践。
我只有几个客户将此作为试验运行,但如果我丢失一半的数据,他们不会高兴!
我在 SO 上看到过这个问题,但我似乎无法弄清楚它为什么存在。
我从这里开始学习教程
我正在使用 useState 但当我尝试更新状态时,数组为空。我正在使用状态最初创建一个空数组。在收到消息时,我尝试使用扩展运算符将消息添加到数组中,我已经无数次使用它来将对象添加到数组中(但从未在 useEffect 中使用)。
如果我取消注释行的注释,“聊天”将按其应有的方式更新,但我无法理解为什么扩展运算符不起作用,我需要使用 useRef 来使其工作。我不想为每个相应的 useState 提供大量的 useRef (至少不知道为什么有必要)
任何人都可以看到我做错了什么,或者解释为什么我需要 useRef 吗?
const [chat, setChat ] = useState([]);
//const latestChat = useRef(null);
//latestChat.current = chat;
// ...
useEffect(() => {
if (connection) {
connection.start()
.then(result => {
console.log('Connected!');
connection.on('ReceiveMessage', message => {
const newMsg = {
user: message.user,
message:message.message
}
setChat([...chat, newMsg]); // issue with this line. chat is always empty
//const updatedChat = [...latestChat.current];
//updatedChat.push(message);
//setChat(updatedChat);
});
})
.catch(e => console.log('Connection …Run Code Online (Sandbox Code Playgroud) 我正在使用 DirectorySearcher 尝试获取 AD 中的用户列表以将它们与我的应用程序同步,并已从各种 SO 源复制代码,但是我没有获得任何属性值。我正在使用以下代码:
DirectorySearcher search = new DirectorySearcher();
SearchResultCollection results = null;
string sDefaultOU = "LDAP://...";
DirectoryEntry de = new DirectoryEntry(sDefaultOU);
string userName = "DonaldDuck";
search = new DirectorySearcher
{
SearchRoot = de,
PropertiesToLoad = { "displayname", "sAMAccountName"},
Filter = "(sAMAccountName=" + userName + ")"
};
results = search.FindAll();
foreach (SearchResult result in results)
{
String name;
if (result.Properties["sAMAccountName"].Count > 0)
{
name = result.Properties["sAMAccountName"][0].ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,name 不是等于“DonaldDuck”,而是“Byte[10]”或 Byte[x],其中 x 是长度。
谁能看到我做错了什么。
如果我添加一个过滤器,它会返回一个用户,所以我很确定代码在搜索方面是有效的