我需要在条件为ORs而不是ANDs的多个条件下进行左连接.我已经找到了很多后者的样本,但我正在努力为我的场景找到正确的答案.
from a in tablea
join b in tableb on new { a.col1, a.col2 } equals new { b.col1, b.col2 }
group a by a into g
select new () { col1 = a.col1, col2 = a.col2, count = g.Count() }
Run Code Online (Sandbox Code Playgroud)
适用于所有条件必须匹配的连接.我需要让联接匹配on a.col1 = b.col1 OR a.col2 = b.col2.
我知道这一定很容易,但我在这个问题上一片空白!
编辑:
为了提供更多信息,查询的目的是获得包含"a"中所有字段的投影以及"b"中匹配记录的计数.我修改了上面的示例,试图说明我追求的是什么.当我使用上述方法运行时,Jon Skeet已经注意到我从a获得了所有记录的计数,而不是b中相关记录的计数.
基本左连接工作正常:
from a in tablea
from b in tableb
.Where( b => ( a.col1 == b.col1 || a.col2 == b.col2))
.DefaultIfEmpty() …Run Code Online (Sandbox Code Playgroud) 我正在测试.net 4上的WCF中的REST服务 - 即没有svc文件.它在VS dev服务器上运行时效果很好,但当我将其切换为针对IIS运行时,我在尝试浏览帮助页面或点击任何服务方法时得到404.
我已经退回到一个简单的骨头服务,只是让它在IIS上运行,但我不确定它有什么问题.
global.asax只是有
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(DataPortalService)));
}
Run Code Online (Sandbox Code Playgroud)
而服务本身就像它得到的一样简单:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class DataPortalService : IDataPortalService
{
[WebGet(UriTemplate = "Test/TestMethod")]
public string TestMethod()
{
return "Hi!";
}
}
[ServiceContract]
public interface IDataPortalService
{
[OperationContract]
string TestMethod();
}
Run Code Online (Sandbox Code Playgroud)
和配置文件
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
点击/帮助页面或方法给我一个404.0.
我认为我只是错过了IIS中的一些设置以使其生动起来,尽管它在开发服务器上工作正常但不是IIS有点愚蠢.
我需要在接下来的几天内将一个非常快速的原型/概念验证应用程序演示给某人演示,这样我就可以像平常那样完全研究这个.设置是一个在笔记本电脑上运行的非常简单的数据库应用程序 - 只会是一个用户更新几个表,所以我想要针对SQL Compact敲击一个基本的Win Forms应用程序.Visual Studio的自动生成的数据网格编辑屏幕可以很好地进行一些自定义.第二个方面是添加一个Windows移动客户端应用程序,该应用程序可以从存储在笔记本电脑上的两个表中提取数据,编辑一些数据并插入一些额外的行,然后再将更改发送回数据库的笔记本电脑副本.
我没有做任何WinMo开发,所以对我来说最好的方法是什么.当WinMo设备通过USB连接到笔记本电脑时,在两个数据库之间同步数据是否容易?
到目前为止我看过的大多数样本似乎都是使用IIS将SQL Compact与SQL Standard同步,这看起来有点过分.要同步的数据量非常小,如果在连接设备时我很容易从笔记本电脑应用程序查询/更新Compact DB,我可以轻松编写一些手动同步代码.
编辑:
我见过提到,一个快速简便的解决方案是使用RAPI - 当设备连接复制DB到笔记本电脑,连接并做必要的魔术,然后将其复制回设备.这种方法有什么问题吗?这是一个笔记本电脑用户,只有一个移动设备用户可以同步,所以这是非常基本的东西.在任何单个同步中,更新量可能少于10条记录.
我对一个简单的视图有一个烦恼,这个视图有一个包含复选框的项目列表.
@for (int i = 0; i < Model.ApiKeys.Count; i++)
{
<tr>
<td>@Html.TextBoxFor(m => m.ApiKeys[i].Name, new { @class = "api-input-150" })</td>
<td>@Html.CheckBoxFor(m => m.ApiKeys[i].Remove, new { @class = "api-input-50" })</td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)
当表单提交时,我删除任何标记为要删除的项目,然后返回包含新数据集的视图.
我所看到的是,如果列表仍包含与在帖子上删除的行之一具有相同索引的项目,则即使Remove属性的值设置为false,也会错误地检查项目复选框.
例如,3个项目的列表>删除项目2>在视图渲染时检查列表中的第2个项目.
3项目清单>删除项目3>在结果视图中未选中任何项目
4项目清单>删除项目1和2>在结果视图中检查剩余项目
如果我刷新页面然后正确呈现所以我通过执行RedirectToAction来强制GET到视图而不是仅仅从POST返回视图但是想知道出了什么问题以及我如何修复这个正确.
以下是两个操作的实际代码段:
public ActionResult Index()
{
return View(GetSettings());
}
[HttpPost]
public ActionResult Index(Model.Setup settings)
{
if (ModelState.IsValid)
{
SaveSettings(settings);
return View(GetSettings());
}
else
{
return View(settings);
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于我的基础数据都已正确更新,这只发生在POST的响应中我想知道是否有某种浏览器功能正在缓存已检查状态并覆盖我的视图实际上尝试渲染的内容. .
......或者这里有一个真正的简单错误,我盯着它看错了太久了!