![](/img/trans.png)
[英]how to get a list of item in object from another table using linq and entity framework in C#?
[英]how to get two table combine record using entity framework with linq c#?
我想使用linq c#lambda表達式獲取兩個表合並數據,並獲取列表中列的固定編號。 我已經嘗試過此代碼,但是我不知道如何在linq lambda表達式中編寫查詢。
這是我的方法:
public ActionResult GetUserList(string searchRequest)
{
List<User> userList = new List<User>();
if (searchRequest != null)
{
if (searchRequest == "All")
{
// here i want to write select query but how i don't know
userList = db.user.ToList();
}
else if (searchRequest == "Flight")
{
userList = db.user
.Where(t => t.type_id == (int)ServiceTypeEnum.Flight)
.ToList();
}
}
return Json(new { data = userList });
}
任何人都對此查詢有想法,那么請讓我知道該怎么做。
為要選擇的列定義UserDto類
public class UserDto
{
public int Id{get;set;}
public int Name{get;set;}
//Other Properties
}
然后將您的代碼更改為以下內容
public ActionResult GetUserList(string searchRequest)
{
try
{
if (searchRequest != null)
{
IQueryable<User> query;
if (searchRequest == "All")
{
query = db.user.AsQueryable(); // here i want to write select query but how i don't know
}
else if (searchRequest == "Flight")
{
UserList = db.user.Where(t => t.type_id == (int)ServiceTypeEnum.Flight);
}
if(query != null)
{
var list = query.Select(e=> new UserDto
{
Id = e.Id,
Name = e.Name
//Other properties
}).ToList();
return Json(new { data = list });
}
}
}
catch (Exception ex)
{
throw;
}
return Json(null);
}
您在選擇特定字段的lambda上會遇到的問題是,結果通常是匿名類型。 由於編譯器無法驗證類型的結構或相等性,因此無法輕松地將來自兩個不同查詢的匿名類型連接到一個列表中。
還有其他解決方法...
最佳實踐方法是創建一個正式的類型定義並使用它,以便您可以在lambda表達式之外操作對象。 注意這里我假設一個簡單的示例結構是用戶的子集:
public ActionResult GetUserList(string searchRequest)
{
try
{
List<UserSearchResult> UserList = new List<UserSearchResult>();
if (searchRequest != null)
{
if (searchRequest == "All")
{
UserList.AddRange(db.user.Select(u => new UserSearchResult { Title = u.Title, FirstName = u.Firstname, LastName = u.Lastname })); // here i want to write select query but how i don't know
}
else if (searchRequest == "Flight")
{
UserList.AddRange(db.user.Where(t => t.type_id == (int)ServiceTypeEnum.Flight)
.Select(u => new UserSearchResult { Title = u.Title, FirstName = u.Firstname, LastName = u.Lastname }));
}
}
return Json(new { data = UserList });
}
catch (Exception ex)
{
throw;
}
return Json(null);
}
public class UserSearchResult
{
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
因為我們已經將選擇特定字段的結果顯式轉換為形式類型,所以我們現在可以在查詢之外的操作中使用該類型,甚至可以操縱值。
我認為局部變量阻礙了您。 只需返回您想要的結果。
public ActionResult GetUserList(string searchRequest)
{
if (searchRequest == "All")
{
var users = db.user
.Select(user => new {user.Name, user.Address.ZipCode})
.ToList();
return ToJson(users);
}
else if (searchRequest == "Flight")
{
List<User> users = db.user
.Where(t => t.type_id == (int)ServiceTypeEnum.Flight)
.ToList();
return ToJson(users);
}
return ToJson(new List<User>());
}
private ActionResult ToJson<T>(T list)
{
return Json(new { data = list });
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.