使用来自各种SO帖子的信息,特别是这个博客(更正使用AndAlso而不是And),我设法将类似的类型linq表达式组合成一个谓词.但现在我想结合两个表达式,其中一个是另一个的输入.这是完全展开的原创Expression;
private Expression<Func<T, bool>> ExpressionIsNamed(IEnumerable<EntityName> AccessorNames)
{
// works
Expression<Func<T, bool>> Texpr = x => x.Security.Readers.Any(n => AccessorNames.ToStringArray().Contains(n.Text));
return Texpr;
}
Run Code Online (Sandbox Code Playgroud)
请注意,至关重要的是,我需要将它们作为表达式进行管理,因为我的数据库驱动程序需要遍历树并转换为本机调用,因此使用Compile()进行组合不是一种选择.
以下是我想要与Any()上面的调用结合起来的函数.最终输出Expression必须是类型Expression<Func<T, bool>>,我需要传递x.Security.Readers给这个.
public static Expression<Func<IEnumerable<EntityName>,bool>> AccessCheckExpression(IEnumerable<EntityName> AccessorNames)
{
return accessList => accessList.Any(n => AccessorNames.ToStringArray().Contains(n.Text));
}
Run Code Online (Sandbox Code Playgroud)
我得尽可能这一点,但我在努力解决如何换出accessList =>,从accessCheck并将它用accessList在一个单一的表达.到目前为止,我有这个;
private Expression<Func<T, bool>> ExpressionIsNamed(IEnumerable<EntityName> AccessorNames)
{
Expression<Func<T, IEnumerable<EntityName>>> accessList = (T x) => x.Security.Readers;
Expression<Func<IEnumerable<EntityName>, bool>> accessCheck …Run Code Online (Sandbox Code Playgroud) 因此,我根据https://developer.linkedin.com/blog/making-it-easier-you-develop-linkedin在使用LinkedIn登录OAUTH时获取用户的电子邮件地址
但是,似乎没有任何方法可以确保这是一个"经过验证"的电子邮件地址,而不是任何人可以假装要求的电子邮件地址.
如果用户未经过验证,我使用过的其他提供商将无法提供用户的主要电子邮件地址,实际上通常根本不会使用Auth.然而,LinkedIn似乎.
有谁知道这是设计还是有解决方法?
给出一个;
Expression<Func<T, bool>> criteria;
Run Code Online (Sandbox Code Playgroud)
是否有可能将其转换为IMongoQuery 与驱动程序?
看起来它可能在某个地方的QueryBuilder中,但我看不到它.
使用官方C#驱动程序制作MongoDB POCO实体的新副本的最佳方法是什么?
我试过这个;
public T Clone()
{
var bsonWriter = new BsonDocumentWriter(new BsonDocument(), BsonDocumentWriterSettings.Defaults);
BsonSerializer.Serialize(bsonWriter, this);
var newDoc = bsonWriter.ToBsonDocument(typeof(T));
var e = BsonSerializer.Deserialize(newDoc , typeof(T));
return e as T;
}//Clone()
Run Code Online (Sandbox Code Playgroud)
但我得到的只是一个充满空值的空对象.顺便说一句,POCO对象不会从BsonDocument继承,但它确实很好地序列化,我想要利用它所装饰的所有Bson属性,这就是为什么我不想以其他方式复制它.我想要一个副本,因为数据库驱动程序会这样做.