我正在构建一个使用LINQ to SQL的ASP.NET MVC站点.
在我的搜索方法中有一些必需参数和一些可选参数,我想在测试这些可选参数的存在时构建一个LINQ查询.
这就是我目前的想法:
using(var db = new DBDataContext())
{
IQueryable<Listing> query = null;
//Handle required parameter
query = db.Listings.Where(l => l.Lat >= form.bounds.extent1.latitude && l.Lat <= form.bounds.extent2.latitude);
//Handle optional parameter
if (numStars != null)
query = query.Where(l => l.Stars == (int)numStars);
//Other parameters...
//Execute query (does this happen here?)
var result = query.ToList();
//Process query...
Run Code Online (Sandbox Code Playgroud)
这个实现会"绑定" where子句然后执行捆绑查询吗?如果没有,我该如何实现此功能?
另外,还有什么我可以改进的吗?
提前致谢.
例如,假设我想查看我的数据库中是否存在用户:
Select * from Users where inputID = Users.ID
Run Code Online (Sandbox Code Playgroud)
然后,如果该结果带来> 0项,那么用户存在,对吗?
如何使用纯Linq-to-SQL类做这样的事情?
我有我的BLL一些方法,从数据库中获取一些记录,并通过它结合数据控件如GridView或...与UI
是否方法我可以选择我的返回数据类型IQueryable<t>或Ilist<t>.
我的问题是哪一个对我更好,为什么?其实我不知道这两种类型之间的区别,我不知道哪种情况最适合哪种情况?
谢谢
我似乎无法弄清楚LINQ Join扩展方法......我有以下LINQ内联查询:
var cc = from z in zipcodes
join c in contactsRepo.UDF_SelectSome() on z.Zipcode equals c.Zip
Run Code Online (Sandbox Code Playgroud)
LINQ-extension-method语法中的等价物是什么?
在我的Web应用程序上,我正在加载一个页面,该页面可以在表格中加载多达8000行或更多行,每行都有自己的下拉列表.第一个过程被证明是非常低效的,但我被要求这样做.加载行的代码如下:
<tbody>
<% var i = 0;
foreach (var row in Model)
{
var comp = "ok";
if (row.LidExpected != (string.IsNullOrEmpty(row.LidObtained) ? null : row.LidObtained) || row.QuantityExpected != row.QuantityObtained)
{
comp = "ko";
}
%>
<tr class="child_row <%= comp %>">
<input type="hidden" name="Goods.index" value="<%= i %>" />
<td class="field <%= InventoryGoods.Metadata.Gid.CssClass %>">
<%-- <%= Html.Encode(row.Gid) %>--%>
<%--http://tecnicos.urbanos.com/Goods/Details/... --%>
<%= Html.ActionLink(row.Gid, "Details", "Goods", new {id = row.Gid}, null) %>
<%= Html.Hidden(String.Format("Record[{0}].Gid", i), row.Gid) %>
</td>
<td class="field <%= InventoryGoods.Metadata.LidExpected.CssClass %>">
<%= …Run Code Online (Sandbox Code Playgroud) 喜; 我试着运行我的代码.我的程序运行得更慢了.我需要给性能也GetAliSpReqs写更少的代码(),GetMaintData(); GetAccess的.... GET(...我怎样才能写出下面的代码更有效,他们的速度太慢也不是有用的forexample我试着写. GetAliSpReqs()小于1-2行?我怎么样?请帮帮我...
public void LoadById(string SearchItem)
{
var myTechnicTasks = engTaskCtx.Tasks.Where(task => task.MyTechnicReference.StartsWith(SearchItem)).Select(task => new MyTask()
{
id = task.id,
MyTechnicReference = task.MyTechnicReference,
MPDReference = task.MPDReference,
tasktypeid = task.tasktypeid,
shortdesc = task.shortdesc,
interval = task.interval,
critical = task.critical,
mandatory = task.mandatory,
dupinsp = task.dupinsp,
dualsystemmaint = task.dualsystemmaint,
MPDSkill = task.MPDSkill,
MPDCrew = task.MPDCrew,
MPDAccessMH = task.MPDAccessMH,
MPDTotalMH = task.MPDTotalMH,
extratime = task.extratime,
Team = task.Team,
MaintData = EngGetCalculatedTaskField.GetMaintData(task.id),
AliSpReqs = EngGetCalculatedTaskField.GetAliSpReqs(task.id),
Access = EngGetCalculatedTaskField.GetAccess(task.id),
preperation = task.preperation, …Run Code Online (Sandbox Code Playgroud) 我试图使用linq2sql更新SQL 2005中的表中的大约150,000条记录.说到xx.SubmitChanges(),它需要大约45分钟.
我在四核PC上运行sql作为本地实例.
有谁知道为什么这么长时间?或者这是正常的吗?
代码示例:
var y = db.x.Where(j => j.NumberOfOrders > 0).Select(k => k);
foreach (var item in y)
{
try
{
item.k = "bla";
}
catch (Exception ex)
{
//
}
}
db.SubmitChanges();
Run Code Online (Sandbox Code Playgroud) 我想知道在SQL中是否可以从存储过程返回varchar值,我看到的大多数示例返回值都是int
proc中的示例
declare @ErrorMessage varchar(255) if @TestFlag = 0 set @ErrorMessage = 'Test'
return @ErrorMessage
Run Code Online (Sandbox Code Playgroud)
在asp.net上调用更新:
错误: 将varchar值'Development'转换为数据类型int时转换失败.
using (DataContextDataContext dc = conn.GetContext())
{
string serverName = ""
var result = dc.spGetServerName(ref serverName);
return result.ToString();
}
Run Code Online (Sandbox Code Playgroud) 我有一个下拉列表,选中时会从数据库中提取数据.下拉列表中有许多选项,其中一个是"全部".我希望当用户选择"全部"选项时,它应该将所有内容从数据库中拉出来.实现此功能的好方法是什么?
我在LINQ实现中遇到了这个问题.我得到的错误在代码中倾向于作为注释
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
GridViewBind(string.Empty);
}
}
private void GridViewBind(string criteria)
{
string strConn = ConfigurationManager.ConnectionStrings["linqconnstr"].ConnectionString;
MyDB _db = new MyDB(strConn);
IEnumerable<UserRecord> results;
if(criteria == string.Empty)
{
// 'System.Data.Linq.Table<UserRecord>' does not contain a definition
// for 'ToArray' and no extension method 'ToArray' accepting a first
// argument of type 'System.Data.Linq.Table<UserRecord>' could be found
// (are you missing a using directive or an assembly reference?)
results = …Run Code Online (Sandbox Code Playgroud) linq-to-sql ×10
c# ×7
linq ×4
.net ×2
asp.net ×2
asp.net-mvc ×2
ilist ×1
iqueryable ×1
join ×1
optimization ×1
sql ×1
sql-server ×1