如何使用Linq将SQL(2008)中的两列正确转换为字典(用于缓存)?
我目前循环使用IQueryable b/c我无法使用ToDictionary方法.有任何想法吗?这有效:
var query = from p in db.Table
select p;
Dictionary<string, string> dic = new Dictionary<string, string>();
foreach (var p in query)
{
dic.Add(sub.Key, sub.Value);
}
Run Code Online (Sandbox Code Playgroud)
我真正想做的是这样的事情,似乎不起作用:
var dic = (from p in db.Table
select new {p.Key, p.Value })
.ToDictionary<string, string>(p => p.Key);
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:无法从'System.Linq.IQueryable'转换为'System.Collections.Generic.IEnumerable'
我在这里阅读了一些答案:测试视图和控制器,以及模拟,但我仍然无法弄清楚如何测试读取和设置Session值(或任何其他基于上下文的变量)的ASP.NET MVC控制器.如何为我的测试方法提供(会话)上下文?嘲笑答案?有人有例子吗?基本上,我想在调用控制器方法并让控制器使用该会话之前伪造一个会话.有任何想法吗?
不确定这是否可行,或者我是否正确地表达了我正在寻找的内容,但我在我的库中反复使用以下代码,并想练习一些DRY.我根据用户提供的简单搜索字段ala Google查询了一组SQL Server表.我正在使用LINQ根据搜索字符串中的内容组成最终查询.我正在寻找一种方法来使用泛型并传递lambda函数来创建一个可重用的例程:
string[] arrayOfQueryTerms = getsTheArray();
var somequery = from q in dataContext.MyTable
select q;
if (arrayOfQueryTerms.Length == 1)
{
somequery = somequery.Where<MyTableEntity>(
e => e.FieldName.StartsWith(arrayOfQueryTerms[0]));
}
else
{
foreach(string queryTerm in arrayOfQueryTerms)
{
if (!String.IsNullOrEmpty(queryTerm))
{
somequery = somequery
.Where<MyTableEntity>(
e => e.FieldName.Contains(queryTerm));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望创建一个带签名的通用方法,它看起来像:
private IQueryable<T> getQuery(
T MyTableEntity, string[] arrayOfQueryTerms, Func<T, bool> predicate)
Run Code Online (Sandbox Code Playgroud)
我在所有表中使用相同的搜索策略,因此唯一与使用情况完全不同的是搜索到的MyTable和MyTableEntity以及搜索到的FieldName.这有意义吗?LINQ是否有办法在where子句中动态传递要查询的字段名称?或者我可以将其作为谓词lambda传入?
e => e.FieldName.Contains(queryTerm)
Run Code Online (Sandbox Code Playgroud)
我意识到在SQL中有一百五十种方法可以做到这一点,可能更容易,但我很乐意为LINQ系列保留所有内容.此外,我觉得泛型应该对这样的问题很方便.有任何想法吗?
为什么这不起作用(在空的选择列表上操作 <select id="requestTypes"></select>
$(function() {
$.getJSON("/RequestX/GetRequestTypes/", showRequestTypes);
}
);
function showRequestTypes(data, textStatus) {
$.each(data,
function() {
var option = new Option(this.RequestTypeName, this.RequestTypeID);
// Use Jquery to get select list element
var dropdownList = $("#requestTypes");
if ($.browser.msie) {
dropdownList.add(option);
}
else {
dropdownList.add(option, null);
}
}
);
}
Run Code Online (Sandbox Code Playgroud)
但这样做:
更换:
var dropdownList = $("#requestTypes");
使用普通的旧javascript:
var dropdownList = document.getElementById("requestTypes");
我刚观看了即将推出的.NET并行扩展的最后一个Channel 9 vid.你会如何在网络应用中使用它?我特别考虑对SQL db使用并行Linq扩展.在多用户服务器应用程序中使用它作为加速数据访问层的方法是否有意义?有什么问题(除了使用静态集合类型的明显的线程安全问题)?
linq ×3
c# ×2
linq-to-sql ×2
.net ×1
.net-4.0 ×1
asp.net-mvc ×1
html-select ×1
javascript ×1
jquery ×1
lambda ×1
mocking ×1
multicore ×1
session ×1
sql ×1
unit-testing ×1