好的,所以我写了以下功能:
private IQueryable<LogEntry> SelectAll<T>(IEnumerable<LogEntry> logEntries, List<Expression<Func<LogEntry, bool>>> whereClause)
{
var selectAllQuery = from l in logEntries select l;
if (whereClause != null)
{
foreach (Expression<Func<LogEntry, bool>> whereStatement in whereClause)
{
selectAllQuery = selectAllQuery.Where(whereClause);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它不会编译.当它尝试在"selectAllQuery"返回一些内容时抛出错误,如下所示:
System.Collections.Generic.IEnumerable'不包含'Where'的定义,最好的扩展方法重载System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable,System.Func)'有一些无效的参数
我已经尝试过这种方式,我能想到的每一种方式都无济于事.在上面的代码中,运行初始select语句返回selectAllQuery类型System.Linq.Enumerable.WhereSelectEnumerableIterator<LogEntry,LogEntry>
很显然,我遗漏了一些关于LINQ的基本知识.但是什么?
干杯.
简单的问题,但我似乎无法找到或找出答案.
我有一个变量,表示Windows网络共享,例如
\\myBoxName\networkshare\shared
Run Code Online (Sandbox Code Playgroud)
在DOS或PowerShell中(最好是前者,虽然这不是什么大问题)我需要获得另一个变量值来指示该网络共享的物理路径.所以我正在寻找的答案是......
D:\Networkshare\shared
Run Code Online (Sandbox Code Playgroud)
该脚本在共享所在的框上运行,如果有帮助的话.
干杯,马特
我们目前正在努力达到OData标准:
http://www.odata.org/developers/protocols/operations
根据此标准,如果对数据执行PUT操作,则应返回204状态代码.标准说:
当处理PUT请求服务器返回状态204(无内容)以指示成功时,不需要响应主体.
现在,根据其他人在其他地方读到的内容,有些地方声称,如果你要返回204,你绝对不应该回复一个反应机构 - 这不是一个是否需要的问题.
问题是我们需要返回一个身体.在这种情况下,我们正在对一批项目执行更新查询,并且部分成功(即一些更新,一些不更新)是可能的.我们想告诉客户失败是什么,而响应机构是我能想到的唯一方法.
那么这样做的"正确"方法是什么呢?我应该甩掉W3C并返回一具尸体吗?或者我应该诋毁OData并返回不同的响应代码?还是有其他可能吗?
多年来第一次使用CSS进行了涂鸦,我有一种讨厌的感觉,我已经支持自己进入一个角落.
我用这个创建了一个3列浮动布局:
* {
margin: 0;
padding: 0;
font-family: "Trebuchet MS", Verdana, Arial, sans-serif;
}
#wrapper {
width: 960px;
background: silver;
margin: 0 auto;
}
#column-left {
width: 240px;
float: left;
background: #f4d2d4;
padding-top: 36px;
}
#column-center {
margin-top: 41px;
margin-left: 34px;
margin-right: 34px;
width: 492px;
float: left;
background: white;
}
#column-right {
width: 160px;
float: left;
background: white;
margin-top: 49px;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,左侧列具有彩色背景.但它并没有延伸到页面的底部,只是为了覆盖内容.我需要它一直向下伸展.
切换到3列布局的绝对或固定螺钉位置.使用高度:100%必须一直回到身体,这完全混淆了一切.有没有一种简单的方法来解决这个问题?
有一种情况,UI中的复选框需要绑定到数字参数 - 实际上,某些值使复选框为"true",否则为"false".
最简单的方法似乎是使用转换器:
[ValueConversion(typeof(int), typeof(bool?))]
public class TypeToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (targetType != typeof(bool?))
throw new InvalidOperationException("The target must be a bool");
if( (value < 3)
{
return true;
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplmentedExpection();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在XAML中:
<CheckBox IsChecked="{Binding Path=Type.TypeID, Converter={StaticResource TypeConverter}}" />
Run Code Online (Sandbox Code Playgroud)
当使用Convert时,它就像魅力一样,但在使用ConvertBack时完全失败,因为它需要知道数值是什么(它依赖于其他UI元素)才能知道要返回的数字 - 实际上它需要访问绑定对象.
我假设我可以使用ConverterParameter执行此操作,但从事物的外观来看,您无法将值绑定到此属性.
有没有办法解决这个烂摊子?
编辑:我已经通过搞乱原始绑定解决了这个问题,并且放弃了它,因为取消选中我想要做的就是删除项目.但是我将把它留在原处,因为它似乎是一个有效的问题,我对可能的解决方案感到好奇.
我尝试针对两个大小不同的表运行此查询 - #temp大约是15,000行,而Member大约是70,000,000,其中大约68,000,000个没有ID 307.
SELECT COUNT(*)
FROM #temp
WHERE CAST(individual_id as varchar) NOT IN (
SELECT IndividualID
FROM Member m
INNER JOIN Person p ON p.PersonID = m.PersonID
WHERE CompanyID <> 307)
Run Code Online (Sandbox Code Playgroud)
这个查询运行了18个小时,然后我杀了它并尝试了其他的东西,这是:
SELECT IndividualID
INTO #source
FROM Member m
INNER JOIN Person p ON p.PersonID = m.PersonID
WHERE CompanyID <> 307
SELECT COUNT(*)
FROM #temp
WHERE CAST(individual_id AS VARCHAR) NOT IN (
SELECT IndividualID
FROM #source)
Run Code Online (Sandbox Code Playgroud)
在给我一个结果之前,这种情况持续了不到一秒钟.
我很惊讶这一点.我是一个中间层开发人员而不是SQL专家,而且我对引擎盖下发生的事情的理解有点模糊,但我会假设,因为我第一次尝试的子查询是完全相同的代码,要求与第二次尝试完全相同的数据,这些数据大致相同.
但那显然是错的.我无法查看原始查询的执行计划,以查看SQL Server正在尝试执行的操作.那么有人可以解释为什么将数据拆分到临时表中要快得多吗?
编辑:表模式和索引
该#temp表有两列,Individual_ID int和Source_Code varchar(50) …
在我的数据结构中,我有以下类:
public partial class Item
{
// stuff
public int QuoteId { get; set; }
public virtual ItemType ItemType { get; set; }
}
public partial class ItemType
{
//stuff
public virtual ICollection<Item> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是获取所有ItemTypes的列表,每个ItemTypes都根据QuoteId填充其Items集合.
因此,例如,如果有三种项目类型,则其中只有两种具有引用ID为50的项目:
我已经设法通过这个查询获得了一些东西:
r.ItemTypes.Select(x => x.Items.Where(i => i.QuoteId == CurrentQuote.QuoteId));
Run Code Online (Sandbox Code Playgroud)
但是这给了你(正如你所预期的那样,因为我正在Select使用Item)是一个IEnumerable<IEnumerable<Item>>.这具有我之前的结构,但没有ItemType数据.
我意识到这是一个愚蠢的问题,但我对无法得到答案感到沮丧.
这是一个愚蠢的问题,所以你必须原谅我,但我是一个自学成才的程序员,良好,干净的架构经常让我感到难过.我正在通过像这样的问题学习:)
所以我必须编写一个数据访问类来与NoSQL数据库进行交互.麻烦的是,我们希望在以后更改我们的NoSQL平台,因此我需要尽可能地在我的类和实际数据访问之间建立这种依赖关系.
在我脑海中勾勒出这一点,我认为最好的方法是使界面有点像这样:
public interface INoSql
{
string ServerLocation
{
get; set;
}
string DatabaseName
{
get; set;
}
string CollectionName
{
get; set;
}
void SaveChanges(List<NoSqlItem> nsCollection);
}
Run Code Online (Sandbox Code Playgroud)
然后为MongoDB创建一个特定的数据访问类
public class MongoDBConnection : IRealtimeDataAccess
{
string ServerLocation
{
get; set;
}
string DatabaseName
{
get; set;
}
string CollectionName
{
get; set;
}
public void SaveChanges(List<NoSqlItem> nsCollection)
{
MongoServer mServer = MongoServer.Create(this.ServerLocation);
MongoDatabase mDb = mServer.GetDatabase(this.DatabaseName);
MongoCollection<BsonDocument> mDbItemCollection = mDb.GetCollection<BsonDocument>(this.CollectionName);
mDbItemCollection.InsertBatch(nsCollection);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止很简单 - 我所要做的就是确保使用数据访问层的任何类只引用接口,然后如果我们想要换到另一个NoSQL提供者,我所要做的就是重新编写一个新的数据访问组件实现相同的界面吧?好吧,想一想,当我想使用它时问题就出现了.因为这显然不起作用:
INoSql noSQLConnection = new …Run Code Online (Sandbox Code Playgroud) 道歉 - 这可能是重复的.但我无法在网站的其他地方找到有用的答案.
目前正致力于向应用程序添加电子邮件发送功能.它不是在TDD下完成的,但我们已经建立了测试,并且具有良好的覆盖范围.
我的任务是将电子邮件调度添加到现有功能.
public ActionResult RequestApproval(int? id)
{
Job job = rep.GetJob(id);
//widgets
job.IsApproved = true;
SaveJob(job);
}
Run Code Online (Sandbox Code Playgroud)
这是通过静态助手类完成的:
public static class EmailHelper
{
public static void SendEmail(string subject, string body, params string[] to)
{
//gubbins
}
}
Run Code Online (Sandbox Code Playgroud)
所以我补充道
EmailHelper.SendEmail("Approval", "Please approve a thing", job.UsersWhoCanApprove.Select(a => a.Email).ToArray());
Run Code Online (Sandbox Code Playgroud)
到RequestApproval函数.
我知道我可以通过摆弄配置来有效地测试电子邮件传递功能,但我不想在这里这样做.在第一个实例中,它很慢,在第二个实例中,测试属于静态类的测试套件.
您不能将接口放在静态类上.那么我怎么能重构这个,我可以嘲笑或绕过对静态类的调用?
我的桌子
functions_groups
+---------------+----------+
| function_name | group_id |
+---------------+----------+
| function1 | 46 |
| function1 | 47 |
| function2 | 46 |
+---------------+----------+
groups
+----------+------------+
| group_id | group_name |
+----------+------------+
| 46 | Group46 |
| 47 | Group47 |
+----------+------------+
Run Code Online (Sandbox Code Playgroud)
产量
+-----------+----------------------+
| Function | Groups |
+-----------+----------------------+
| function1 | Group46, Group47 |
| function2 | Group46 |
+-----------+----------------------+
Run Code Online (Sandbox Code Playgroud)
直到我的查询(这给我空行/单元格)
SELECT
fg.function_name,
GROUP_CONCAT(DISTINCT g.group_name SEPARATOR ', ') AS group_names
FROM functions_groups fg
LEFT JOIN groups …Run Code Online (Sandbox Code Playgroud) c# ×5
linq ×2
sql ×2
architecture ×1
css ×1
css-float ×1
directory ×1
dos ×1
http ×1
interface ×1
mysql ×1
odata ×1
powershell ×1
sql-server ×1
t-sql ×1
unit-testing ×1
wpf ×1