声明匿名类型,请帮助我 [英] Declare Anonymous Type,pls help me

查看:54
本文介绍了声明匿名类型,请帮助我的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,
我在我的应用程序中使用MVC3.在我的控制器中,我必须返回Json数据以绑定我的JQGrid.

根据条件,我想构建我的Json数据.为此,我需要声明变量
"var jsonData"(请参阅​​下面的代码)并将其初始初始化为某个值,以便我可以构建查询并最后返回它以绑定JQGrid.

我试图通过多种方式对其进行初始化,例如通过提供空字符串或将其分配为null等.但是我失败了,请告诉我如何将其初始化为null?

Hi All,
I am using MVC3 in my application. In my controller i have to return Json data to bind my JQGrid.

Based on a condition, i want to build my Json data. For this i need to declare the variable
"var jsonData" (refer below code) and initialize it to some value initially, so that i can build the query and return it at last to bind the JQGrid.

I tried to initialize it in many ways like by giving empty string or assigning it to null etc. But i failed,please tell me How can i initialize it to null?

public JsonResult LoadByName(string txtSearchVal, string SearchBy) 
{ 

//var jsonData= new list<string>; 
if (SearchBy.ToUpper() == "FIRSTNAME") 
{ 
var jsonData = new 
{ 
records = tskgrp.UserDetails.Count(), 
rows = ( 
from user in tskgrp.UserDetails 
where (user.FirstName.StartsWith(txtSearchVal)) 
select new 
{ 
i = user.ID, 
cell = new string[] { user.ID.ToString(), user.FirstName, user.LastName, user.Active.ToString() } 
}).ToArray() 
}; 
} 
if (SearchBy.ToUpper() == "LASTNAME") 
{ 
var jsonData = new 
{ 
records = tskgrp.UserDetails.Count(), 
rows = ( 
from user in tskgrp.UserDetails 
where (user.FirstName.Contains(txtSearchVal)) 
select new 
{ 
i = user.ID, 
cell = new string[] { user.ID.ToString(), user.FirstName, user.LastName, user.Active.ToString() } 
}).ToArray() 
}; 
} 
return Json(jsonData, JsonRequestBehavior.AllowGet); 
} </string>

推荐答案

最简单的解决方案是拥有2个return语句.
如果您希望使用更简洁的方法,请为每种情况创建一个私有函数.

The simplest solution would be to have 2 returns statements.

If you prefer a cleaner approch, then create a private function for each case.

public JsonResult LoadByName(string txtSearchVal, string SearchBy) 
{
    JsonResult result = null;

    if (SearchBy.ToUpper() == "FIRSTNAME") 
    { 
        result = LoadByFirstName(txtSearchVal);
    } 
    else if (SearchBy.ToUpper() == "LASTNAME") 
    { 
        result = LoadByLastName(txtSearchVal);
    }
    return result;
}

private JsonResult LoadByFirstName(string txtSearchVal)
{
    var jsonData = new
    {
        records = tskgrp.UserDetails.Count(),
        rows = (
            from user in tskgrp.UserDetails
            where (user.FirstName.StartsWith(txtSearchVal))
            select new
            {
                i = user.ID,
                cell = new string[] 
                { 
                     user.ID.ToString(), 
                     user.FirstName, 
                     user.LastName, 
                     user.Active.ToString() 
                }
            }).ToArray()
    };
    return Json(jsonData, JsonRequestBehavior.AllowGet);
}

private JsonResult LoadByLastName(string txtSearchVal)
{
    var jsonData = new
    {
        records = tskgrp.UserDetails.Count(),
        rows = (
            from user in tskgrp.UserDetails
            where (user.LastName.Contains(txtSearchVal))
            select new  
            {
                i = user.ID,
                cell = new string[] 
                { 
                    user.ID.ToString(), 
                    user.FirstName, 
                    user.LastName, 
                    user.Active.ToString() 
                }
            }).ToArray()
    };

    return Json(jsonData, JsonRequestBehavior.AllowGet);
}


此外,由于查询仅因where子句而异,因此可以简单地使用OR操作来控制过滤.

Also since your query only varies by the where clause, it is possible to simply use an OR operation to control the filtering.

bool searchFirstName = false;
bool searchLastName = false;

switch (SearchBy.ToUpper())
{
    case "FIRSTNAME" :
        searchFirstName = true;
        break;

    case "LASTNAME" :
        searchLastName = true;
        break;

    case null:
    case "":
        // Unfiltered as is... Adjust if desired.
        break;

    default:
        // Could raise an exception here or return an
        // empty result set.
        break;
}

//...

var query =
    from user in tskgrp.UserDetails
    where !searchFirstName || user.FirstName.Contains(txtSearchVal)
    where !searchLastName || user.LastName.Contains(txtSearchVal)
    select new
    {
        // ...
    };

//...



尽管它可能会慢一些,但是当使用这样的技巧进行过滤时,它将大大减少代码重复.



Although it might be somewhat slower, it will greatly reduce code duplication when a trick like this is used for filtering.


这篇关于声明匿名类型,请帮助我的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆